Search
j0ke.net Open Build Service
>
Projects
>
virtualization
:
xen
:
redhat
>
pulseaudio
> pulseaudio-0.9.10-libtool.patch
Sign Up
|
Log In
Username
Password
Cancel
Overview
Repositories
Revisions
Requests
Users
Advanced
Attributes
Meta
File pulseaudio-0.9.10-libtool.patch of Package pulseaudio
Workaround libtool 1.5.22 bugs Lennart in http://pulseaudio.org/wiki/KnownIncompatibilities said: libtool's libltdl 1.5.22 is buggy and causes PA to abort immediately after startup with a mutex locking error. Upgrade to 1.5.24 at least. The mutex locking error is caused by lt_dlmutex_register() calling the new unlock function. A workaround could be to ignore the call to the unlock function made by lt_dlmutex_register(). But there's yet another bug. The seterror function is not set by lt_dlmutex_register(). Therefore the get/set symmetry is broken. lt_dlmutex_register() won't allow us to not set a get function and since neither lt_dlmutex_seterror_func nor lt_dllast_error are visible outside of ltdl.c, we cannot even fix it afterwards. We could try to avoid ltdl functions which depend on LT_DLMUTEX_{SET,GET}ERROR. lt_dlopenext() is one of those. It can be worked around by using lt_dlopen() instead and using the filename with the ".so" extension. But there may be other things affected by broken LT_DLMUTEX_SET_ERROR. At the very least, any error messages from ltdl would show up as '(null)'. In the end the easiest fix is to skip calling lt_dlmutex_register() completely. It was meant to provide thread-safety for ltdl, but it could not work in all situations, later libtool releases deprecated this function and libtool 2.2 does not have it anymore. PA stopped using it in v0.9.15. I don't know whether PA loads modules from a single thread only or not. If not, we could add locking around ltdl calls in PA. -- Michal Schmidt <mschmidt@redhat.com> Index: pulseaudio-0.9.10/src/daemon/ltdl-bind-now.c =================================================================== --- pulseaudio-0.9.10.orig/src/daemon/ltdl-bind-now.c +++ pulseaudio-0.9.10/src/daemon/ltdl-bind-now.c @@ -154,7 +154,7 @@ void pa_ltdl_init(void) { pa_assert_se(lt_dlinit() == 0); pa_assert_se(libtool_mutex = pa_mutex_new(TRUE, FALSE)); #ifdef HAVE_LT_DLMUTEX_REGISTER - pa_assert_se(lt_dlmutex_register(libtool_lock, libtool_unlock, libtool_set_error, libtool_get_error) == 0); +// pa_assert_se(lt_dlmutex_register(libtool_lock, libtool_unlock, libtool_set_error, libtool_get_error) == 0); #endif #ifdef PA_BIND_NOW