From 6eefae48229c76e9396602f39903ed9c396d2e3c Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 21 Oct 2015 17:17:49 -0400 Subject: [PATCH] add hacks to work around pulseaudio+xwayland integration deadlocks enlightenment is (I think) the first wayland compositor to run with in-process pulseaudio integration for audio playback and not just mixer support. hooray. this results in a fun issue: if DISPLAY is set, as it must be for x11 clients to function, pulseaudio will unconditionally attempt to use a blocking socket connection to create a connection to the running xserver. the only exception here is if x11 support has been compiled out of pulseaudio, but probably no distro will do that ever. so, what happens when the compositor thread tries to create a socket connection to the xserver that the compositor thread has not yet started? absolutely nothing. forever. the easiest solution which continues to provide the key press sounds that everyone loves is to ensure that the pulseaudio connection is created before DISPLAY is ever set, namely in the xwayland module init. this will now occur automatically now in the case when the mixer module detects pulseaudio support. TL;DR: don't disable mixer module if you use xwayland --- README.wayland | 3 +++ configure.ac | 4 ++-- src/modules/xwayland/e_mod_main.c | 7 +++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/README.wayland b/README.wayland index 53e9ee75f..61e357b2c 100644 --- a/README.wayland +++ b/README.wayland @@ -52,6 +52,9 @@ to try out XWayland support: --enable-xwayland +NOTE: DO NOT DISABLE THE MIXER MODULE BUILD IF YOU ARE USING XWAYLAND. +You have been warned. + At this stage, you should have EFL properly built, and Enlightenment properly built. Let's move on to running it... diff --git a/configure.ac b/configure.ac index cbcbac1c1..fcfeebd13 100644 --- a/configure.ac +++ b/configure.ac @@ -682,7 +682,7 @@ define([CHECK_MODULE_MIXER], AC_E_CHECK_PKG(ALSA, [alsa >= 1.0.8], [ ], [ ]) AC_E_CHECK_PKG([PULSE], [libpulse-simple libpulse], - [ ], [ ]) + [AC_DEFINE_UNQUOTED([HAVE_PULSE], [1], [have pulseaudio])], [ ]) ]) SHM_OPEN_LIBS="" @@ -837,7 +837,7 @@ HAVE_XWAYLAND_DEPS=false define([CHECK_MODULE_XWAYLAND], [ if test "x${have_wayland}" = "xyes"; then - AC_E_CHECK_PKG(XWAYLAND, [ ecore >= ${efl_version} ecore-x >= ${efl_version} ], [HAVE_XWAYLAND_DEPS=true], [HAVE_XWAYLAND_DEPS=false]) + AC_E_CHECK_PKG(XWAYLAND, [ ecore >= ${efl_version} ecore-x >= ${efl_version} ecore-audio >= ${efl_version} ], [HAVE_XWAYLAND_DEPS=true], [HAVE_XWAYLAND_DEPS=false]) AC_PATH_PROG([XWAYLAND_BIN], [Xwayland], [false]) else HAVE_XWAYLAND_DEPS=false diff --git a/src/modules/xwayland/e_mod_main.c b/src/modules/xwayland/e_mod_main.c index 24fef04f7..e73e254b4 100644 --- a/src/modules/xwayland/e_mod_main.c +++ b/src/modules/xwayland/e_mod_main.c @@ -2,6 +2,9 @@ #include #include #include +#ifdef HAVE_PULSE +# include +#endif EINTERN void dnd_init(void); EINTERN void dnd_shutdown(void); @@ -351,6 +354,10 @@ e_modapi_init(E_Module *m) if (!(exs = calloc(1, sizeof(E_XWayland_Server)))) return NULL; +#ifdef HAVE_PULSE + eo_del(eo_add(ECORE_AUDIO_OUT_PULSE_CLASS, NULL)); +#endif + /* record wayland display */ exs->wl_disp = e_comp_wl->wl.disp;