The attaced patch removes the startup of the dummy thread. With this patch, I can't trigger a segfault in php-cli anymore. strace confirms, that that php does not spawn a thread any more. The patch passes the mysql server test suite in the build.
So I assume, that the workround is not neccesary in lenny any more. mfg Martin Kögler
diff -u mysql-dfsg-5.0-5.0.51a/debian/changelog mysql-dfsg-5.0-5.0.51a/debian/changelog --- mysql-dfsg-5.0-5.0.51a/debian/changelog +++ mysql-dfsg-5.0-5.0.51a/debian/changelog @@ -1,3 +1,9 @@ +mysql-dfsg-5.0 (5.0.51a-24.2) testing-proposed-updates; urgency=low + + * fix race condition + + -- Martin Koegler <mkoeg...@auto.tuwien.ac.at> Fri, 13 Feb 2009 21:56:01 +0000 + mysql-dfsg-5.0 (5.0.51a-24) testing-proposed-updates; urgency=low * Update SSL certificates, and re-enable SSL related tests when running diff -u mysql-dfsg-5.0-5.0.51a/debian/patches/00list mysql-dfsg-5.0-5.0.51a/debian/patches/00list --- mysql-dfsg-5.0-5.0.51a/debian/patches/00list +++ mysql-dfsg-5.0-5.0.51a/debian/patches/00list @@ -31,0 +32 @@ +fix-dummy-thread-race-condition.dpatch only in patch2: unchanged: --- mysql-dfsg-5.0-5.0.51a.orig/debian/patches/fix-dummy-thread-race-condition.dpatch +++ mysql-dfsg-5.0-5.0.51a/debian/patches/fix-dummy-thread-race-condition.dpatch @@ -0,0 +1,67 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## fix-dummy-thread-race-condition.dpatch by <mkoeg...@auto.tuwien.ac.at> +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Avoid dummy thread for pthread_exit workaround + +...@dpatch@ +diff -urNad mysql-dfsg-5.0-5.0.51a~/mysys/my_thr_init.c mysql-dfsg-5.0-5.0.51a/mysys/my_thr_init.c +--- mysql-dfsg-5.0-5.0.51a~/mysys/my_thr_init.c 2009-02-13 20:50:42.000000000 +0000 ++++ mysql-dfsg-5.0-5.0.51a/mysys/my_thr_init.c 2009-02-13 20:56:05.000000000 +0000 +@@ -47,23 +47,6 @@ + pthread_mutexattr_t my_errorcheck_mutexattr; + #endif + +-#ifdef TARGET_OS_LINUX +- +-/* +- Dummy thread spawned in my_thread_global_init() below to avoid +- race conditions in NPTL pthread_exit code. +-*/ +- +-static pthread_handler_t +-nptl_pthread_exit_hack_handler(void *arg __attribute__((unused))) +-{ +- /* Do nothing! */ +- pthread_exit(0); +- return 0; +-} +- +-#endif /* TARGET_OS_LINUX */ +- + static uint get_thread_lib(void); + + /* +@@ -88,32 +71,6 @@ + return 1; + } + +-#ifdef TARGET_OS_LINUX +- /* +- BUG#24507: Race conditions inside current NPTL pthread_exit() +- implementation. +- +- To avoid a possible segmentation fault during concurrent +- executions of pthread_exit(), a dummy thread is spawned which +- initializes internal variables of pthread lib. See bug description +- for a full explanation. +- +- TODO: Remove this code when fixed versions of glibc6 are in common +- use. +- */ +- if (thd_lib_detected == THD_LIB_NPTL) +- { +- pthread_t dummy_thread; +- pthread_attr_t dummy_thread_attr; +- +- pthread_attr_init(&dummy_thread_attr); +- pthread_attr_setdetachstate(&dummy_thread_attr, PTHREAD_CREATE_DETACHED); +- +- pthread_create(&dummy_thread,&dummy_thread_attr, +- nptl_pthread_exit_hack_handler, NULL); +- } +-#endif /* TARGET_OS_LINUX */ +- + #ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP + /* + Set mutex type to "fast" a.k.a "adaptive"