Make sure libpulse never gets unloaded
authorLennart Poettering <lennart@poettering.net>
Sat, 1 Nov 2008 20:11:48 +0000 (21:11 +0100)
committerLennart Poettering <lennart@poettering.net>
Sat, 1 Nov 2008 20:11:48 +0000 (21:11 +0100)
When an .so is unloaded during runtime all TLS keys it has registered
need to be freed because the destructor callbacks of the TLS key might
otherwise point to invalid code. Hence it would appear sensible to
destruct the TLS keys from a function marked as __attribute__
((destructor)). However functions marked like that are also called when
an application terminates, on exit(). If a thread continues to run until
the very exit it might still want to access that TLS data. The
destructor functions are called while all other threads are still
running. If __attribute ((destructor)) is used to destruct TLS keys for
such threads this might hence cause a crash when the application shuts
down.

To circumvent this problem we'll now compile libpulse with -z nodelete,
to make it unnecessary to delete the TLS data ever and thus avoiding the
problem. It's suboptimal, but for now I see no better solution.

src/Makefile.am

index 5ed0f6f..b9d0083 100644 (file)
@@ -69,7 +69,7 @@ AM_CFLAGS = \
 
 AM_LIBADD = $(PTHREAD_LIBS) $(INTLLIBS)
 AM_LDADD = $(PTHREAD_LIBS) $(INTLLIBS)
-AM_LDFLAGS =
+AM_LDFLAGS = -Wl,-z,nodelete
 
 if STATIC_BINS
 BINLDFLAGS = -static