From: Date: January 12 2009 8:57pm Subject: bzr commit into mysql-5.1-bugteam branch (chad:2730) Bug#36428 Bug#38364 List-Archive: http://lists.mysql.com/commits/63028 X-Bug: 36428,38364 Message-Id: <20090112195751.8D770830B4@chad.cornsilk.net> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit #At file:///home/cmiller/work/mysqlbzr/mysql-5.1-bugteam--bug38364/ based on revid:davi.arnaut@stripped 2730 Chad MILLER 2009-01-12 Bug#38364: gen_lex_hash segmentation fault in debug build Bug#36428: MY_MUTEX_INIT_FAST is used before initialization On some thread implementations, we need a fake mutex attri- bute as a placeholder, which we define as a global variable, "my_fast_mutexattr". Well. that must be initialized before used in any mutexes, and the ordering of initializations in the API function my_init() was wrong. Now, put my_thread_global_init(), which initializes the attri- butes that mutexes require. modified: mysys/my_init.c === modified file 'mysys/my_init.c' --- a/mysys/my_init.c 2008-11-10 20:38:45 +0000 +++ b/mysys/my_init.c 2009-01-12 19:48:02 +0000 @@ -78,8 +78,12 @@ my_bool my_init(void) my_umask= 0660; /* Default umask for new files */ my_umask_dir= 0700; /* Default umask for new directories */ init_glob_errs(); -#if defined(THREAD) && defined(SAFE_MUTEX) +#if defined(THREAD) + if (my_thread_global_init()) + return 1; +# if defined(SAFE_MUTEX) safe_mutex_global_init(); /* Must be called early */ +# endif #endif #if defined(THREAD) && defined(MY_PTHREAD_FASTMUTEX) && !defined(SAFE_MUTEX) fastmutex_global_init(); /* Must be called early */ @@ -89,8 +93,6 @@ my_bool my_init(void) #if defined(HAVE_PTHREAD_INIT) pthread_init(); /* Must be called before DBUG_ENTER */ #endif - if (my_thread_global_init()) - return 1; #if !defined( __WIN__) && !defined(__NETWARE__) sigfillset(&my_signals); /* signals blocked by mf_brkhant */ #endif