Hi All I'm trying to create a new database using the embedded server (MySQL 4.0.13). I compiled the source distribution on linux as follows:
./configure --prefix=/fs32/b/sgsubram/bin/MySQL-with-new-hash/LINUX --enable-assembler --with-mysqld-ldflags=-all-static --localstatedir=/fs32/b/sgsubram/bin/MySQL-with-new-hash/LINUX/data --with-client-ldflags=-all-static -enable-thread-safe-client --enable-local-infile --with-extra-charsets=complex gmake; gmake install The installation went smoothly without any problems. I tested the sample test_libmysqld.c program and it went through fine. Then I tried the following. I changed the code for the functions db_connect and main in test_libmysqld.c to create a new database if there is no database by that name. The changed code segment is as follows (changes are in bold): int main(int argc, char **argv) { MYSQL *one, *two; mysql_server_init(argc, argv, (char **)server_groups); one = db_connect("hello"); two = db_connect(NULL); db_do_query(one, "SHOW TABLE STATUS"); db_do_query(two, "SHOW DATABASES"); mysql_close(two); mysql_close(one); /* This must be called after all other mysql functions */ mysql_server_end(); exit(EXIT_SUCCESS); } MYSQL * db_connect(const char *dbname) { MYSQL *db = mysql_init(NULL); if (!db) die(db, "mysql_init failed: no memory"); /* * Notice that the client and server use separate group names. * This is critical, because the server will not accept the * client's options, and vice versa. */ mysql_options(db, MYSQL_READ_DEFAULT_GROUP, "test_libmysqld_CLIENT"); if (!mysql_real_connect(db, NULL, NULL, NULL, dbname, 0, NULL, 0)) { char query[1024]; sprintf(query, "CREATE DATABASE %s", dbname); if (mysql_query(db, query) != 0) { die(db, "mysql_real_connect failed: %s", mysql_error(db)); } else { if (!mysql_real_connect(db, NULL, NULL, NULL, dbname, 0, NULL, 0)) { die(db, "mysql_real_connect failed: %s", mysql_error(db)); } } } return db; } There is no database by name "hello". The crash happens in mysql_server_init(). The crash does not happen if I try to connect to an existing database by name "test". The stack trace that I get when I run it inside gdb is as follows: (gdb) where #0 0x0828c416 in __sigsuspend (set=0xbfffb870) at ../sysdeps/unix/sysv/linux/sigsuspend.c:45 #1 0x082804b5 in __pthread_wait_for_restart_signal (self=0x83c4900) at pthread.c:978 #2 0x08280591 in __pthread_create_2_1 (thread=0xbfffba10, attr=0xbfffba14, start_routine=0x81eaa00 <io_handler_thread>, arg=0x841bba0) at restart.h:34 #3 0x081a171f in os_thread_create () #4 0x081ebecb in innobase_start_or_create_for_mysql () #5 0x08051672 in innobase_init () #6 0x08058f44 in ha_init () #7 0x080500b4 in mysql_server_init () #8 0x080481eb in main (argc=1, argv=0xbfffc434) at test_libmysqld.c:45 #9 0x082885f2 in __libc_start_main (main=0x80481d0 <main at test_libmysqld.c:20>, argc=1, ubp_av=0xbfffc434, init=0x80480b4 <_init>, fini=0x82ff480 <_fini>, rtld_fini=0, stack_end=0xbfffc42c) at ../sysdeps/generic/libc-start.c:129 Any help with this problem would be greatly appreciated. Thanks Satheesh ____________________________________________________________ Get advanced SPAM filtering on Webmail or POP Mail ... Get Lycos Mail! http://login.mail.lycos.com/r/referral?aid=27005