From 84cd23303550cdc3aa605add9f8a2faa3fc1c3e1 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sat, 1 Nov 2008 21:11:48 +0100 Subject: Make sure libpulse never gets unloaded 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 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile.am b/src/Makefile.am index 5ed0f6fd..b9d00831 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -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 -- cgit