List:Internals« Previous MessageNext Message »
From:Vasil Dimov Date:April 21 2008 3:41pm
Subject:5.0 compilation fails with SEGFAULT from extra/comp_err
View as plain text  
Hi,

I tried to compile latest MySQL 5.0 from BK and got this:

$ ./BUILD/autorun.sh && ./configure --prefix=/tmp/mysql-5.0-install
--with-debug --with-plugins=innobase && gmake

...

gcc -g -O -DDBUG_ON -DSAFE_MUTEX -o comp_err comp_err.o  ../mysys/libmysys.a
../dbug/libdbug.a ../strings/libmystrings.a -lz -lcrypt -lm -lpthread  
gmake[3]: Leaving directory `/tmp/mysql-5.0/extra'
../extra/comp_err \
	--charset=../sql/share/charsets \
	--out-dir=../sql/share/ \
	--header_file=../include/mysqld_error.h \
	--name_file=../include/mysqld_ername.h \
	--state_file=../include/sql_state.h \
	--in_file=../sql/share/errmsg.txt
gmake[2]: *** [../include/mysqld_error.h] Segmentation fault: 11 (core dumped)
gmake[2]: Leaving directory `/tmp/mysql-5.0/extra'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/tmp/mysql-5.0'
gmake: *** [all] Error 2
$

Here is the relevant backtrace:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x800d01120 (LWP 100384)]
0x00000008009a3e5a in mutex_init (mutex=0x546898, mutex_attr=0x548908, private=0, 
    calloc_cb=0x401f94 <calloc>) at /usr/src/lib/libthr/thread/thr_mutex.c:113
113			if (attr->m_type < PTHREAD_MUTEX_ERRORCHECK ||
(gdb) bt
#0  0x00000008009a3e5a in mutex_init (mutex=0x546898, mutex_attr=0x548908, private=0, 
    calloc_cb=0x401f94 <calloc>) at /usr/src/lib/libthr/thread/thr_mutex.c:113
#1  0x00000008009a42c9 in __pthread_mutex_init (mutex=0x546898, mutex_attr=0x548908)
    at /usr/src/lib/libthr/thread/thr_mutex.c:207
#2  0x000000000040aeb3 in safe_mutex_global_init () at thr_mutex.c:50
#3  0x000000000040493d in my_init () at my_init.c:80
#4  0x0000000000403b39 in main (argc=1, argv=0x7fffffffebc0) at comp_err.c:162
(gdb) ins attr
$1 = (const struct pthread_mutex_attr *) 0x0

This is because MY_MUTEX_INIT_FAST is not yet initialized when
safe_mutex_global_init() is called. MY_MUTEX_INIT_FAST is initialized in
my_thread_global_init(). I tried adding my_thread_global_init() before
safe_mutex_global_init() in safe_mutex_global_init() in my_init() like
this:

my_bool my_init(void)
{
  my_string str;
  if (my_init_done)
    return 0;
  my_init_done=1;
  mysys_usage_id++;
  my_umask= 0660;                       /* Default umask for new files */
  my_umask_dir= 0700;                   /* Default umask for new directories */
#if defined(THREAD) && defined(SAFE_MUTEX)
  my_thread_global_init();
  safe_mutex_global_init();             /* Must be called early */
#endif

which fixed the segfault but the following was printed:

gcc -g -O -DDBUG_ON -DSAFE_MUTEX -o comp_err comp_err.o  ../mysys/libmysys.a
../dbug/libdbug.a ../strings/libmystrings.a -lz -lcrypt -lm -lpthread  
gmake[3]: Leaving directory `/tmp/mysql-5.0/extra'
../extra/comp_err \
	--charset=../sql/share/charsets \
	--out-dir=../sql/share/ \
	--header_file=../include/mysqld_error.h \
	--name_file=../include/mysqld_ername.h \
	--state_file=../include/sql_state.h \
	--in_file=../sql/share/errmsg.txt
Error in my_thread_global_end(): 1 threads didn't exit
gmake  all-recursive
gmake[3]: Entering directory `/tmp/mysql-5.0/extra'

So I do not think this fix is perfectly fine...

-- 
Vasil Dimov
moc.elcaro@stripped        Software Developer @ Oracle/Innobase Oy
gro.DSBeerF@dv                Committer @ FreeBSD.org
gro.d5v@dv                    Home @ Sofia, Bulgaria

Attachment: [application/pgp-signature]
Thread
5.0 compilation fails with SEGFAULT from extra/comp_errVasil Dimov21 Apr
  • Re: 5.0 compilation fails with SEGFAULT from extra/comp_errSergei Golubchik30 Apr
    • Re: 5.0 compilation fails with SEGFAULT from extra/comp_errVasil Dimov30 Apr