List:Commits« Previous MessageNext Message »
From:Chad MILLER Date:January 26 2009 5:08pm
Subject:bzr commit into mysql-6.0-bugteam branch (chad:2980) Bug#36428 Bug#38364
View as plain text  
#At file:///home/cmiller/work/mysqlbzr/mysql-6.0-bugteam/ based on
revid:ramil@stripped

 2980 Chad MILLER	2009-01-26
      Bug#36428: MY_MUTEX_INIT_FAST is used before initialization
      Bug#38364: gen_lex_hash segmentation fault in debug build
      
      Fix for v6.0 uniquely.
      
      Initialze mutex attributes before doing any other thread 
      operations.
modified:
  include/my_pthread.h
  mysys/my_init.c
  mysys/my_thr_init.c

=== modified file 'include/my_pthread.h'
--- a/include/my_pthread.h	2008-12-14 11:36:15 +0000
+++ b/include/my_pthread.h	2009-01-26 15:56:07 +0000
@@ -621,6 +621,7 @@ extern pthread_mutexattr_t my_errorcheck
 
 typedef ulong my_thread_id;
 
+extern my_bool my_threadattr_global_init(void);
 extern my_bool my_thread_global_init(void);
 extern void my_thread_global_end(void);
 extern my_bool my_thread_init(void);

=== modified file 'mysys/my_init.c'
--- a/mysys/my_init.c	2009-01-16 11:49:33 +0000
+++ b/mysys/my_init.c	2009-01-26 15:56:07 +0000
@@ -84,11 +84,14 @@ my_bool my_init(void)
   if (my_progname)
     my_progname_short= my_progname + dirname_length(my_progname);
 
-#if defined(THREAD) && defined(SAFE_MUTEX)
+#if defined(THREAD)
+  if (my_threadattr_global_init())
+    return 1;
+#  if defined(SAFE_MUTEX)
   safe_mutex_global_init();		/* Must be called early */
-#endif
-#if defined(THREAD) && defined(MY_PTHREAD_FASTMUTEX) &&
!defined(SAFE_MUTEX)
+#  elif defined(MY_PTHREAD_FASTMUTEX)
   fastmutex_global_init();              /* Must be called early */
+#  endif
 #endif
   netware_init();
 #ifdef THREAD

=== modified file 'mysys/my_thr_init.c'
--- a/mysys/my_thr_init.c	2008-12-13 16:34:25 +0000
+++ b/mysys/my_thr_init.c	2009-01-26 15:56:07 +0000
@@ -68,6 +68,47 @@ nptl_pthread_exit_hack_handler(void *arg
 #endif /* TARGET_OS_LINUX */
 
 
+
+/*
+  initialize thread attributes
+
+  SYNOPSIS
+    my_threadattr_global_init()
+
+  RETURN  is error?
+    FALSE  ok
+    TRUE   error
+*/
+
+my_bool my_threadattr_global_init(void)
+{
+#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
+  /*
+    Set mutex type to "fast" a.k.a "adaptive"
+
+    In this case the thread may steal the mutex from some other thread
+    that is waiting for the same mutex.  This will save us some
+    context switches but may cause a thread to 'starve forever' while
+    waiting for the mutex (not likely if the code within the mutex is
+    short).
+  */
+  pthread_mutexattr_init(&my_fast_mutexattr);  /* ?= MY_MUTEX_INIT_FAST */
+  pthread_mutexattr_settype(&my_fast_mutexattr,
+                            PTHREAD_MUTEX_ADAPTIVE_NP);
+#endif
+#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
+  /*
+    Set mutex type to "errorcheck"
+  */
+  pthread_mutexattr_init(&my_errorcheck_mutexattr);
+  pthread_mutexattr_settype(&my_errorcheck_mutexattr,
+                            PTHREAD_MUTEX_ERRORCHECK);
+#endif
+
+  return FALSE;
+}
+
+
 static uint get_thread_lib(void);
 
 /*
@@ -127,28 +168,6 @@ my_bool my_thread_global_init(void)
   if (my_thread_init())
     return 1;
 
-#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
-  /*
-    Set mutex type to "fast" a.k.a "adaptive"
-
-    In this case the thread may steal the mutex from some other thread
-    that is waiting for the same mutex.  This will save us some
-    context switches but may cause a thread to 'starve forever' while
-    waiting for the mutex (not likely if the code within the mutex is
-    short).
-  */
-  pthread_mutexattr_init(&my_fast_mutexattr);
-  pthread_mutexattr_settype(&my_fast_mutexattr,
-                            PTHREAD_MUTEX_ADAPTIVE_NP);
-#endif
-#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
-  /*
-    Set mutex type to "errorcheck"
-  */
-  pthread_mutexattr_init(&my_errorcheck_mutexattr);
-  pthread_mutexattr_settype(&my_errorcheck_mutexattr,
-                            PTHREAD_MUTEX_ERRORCHECK);
-#endif
 
   /* Mutex uses by mysys */
   pthread_mutex_init(&THR_LOCK_open,MY_MUTEX_INIT_FAST);

Thread
bzr commit into mysql-6.0-bugteam branch (chad:2980) Bug#36428 Bug#38364Chad MILLER26 Jan 2009
  • Re: bzr commit into mysql-6.0-bugteam branch (chad:2980) Bug#36428Bug#38364Davi Arnaut26 Jan 2009