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"

Reply via email to