Description:
The rw lock debug list should be covered by the debug list mutex when traversing
the lock debug info.
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: 13 at address: 0x0000000000000000
[Switching to process 22314]
0x00000001004511d1 in rw_lock_debug_print (f=0x7fff7064cf40, info=0xb000000000000) at /Users/sunny/innodb/bzr/5.5/storage/innobase/sync/sync0rw.c:1004
1004 rwt = info->lock_type;
(gdb) bt
#0 0x00000001004511d1 in rw_lock_debug_print (f=0x7fff7064cf40, info=0xb000000000000) at /Users/sunny/innodb/bzr/5.5/storage/innobase/sync/sync0rw.c:1004
#1 0x000000010045109c in rw_lock_list_print_info (file=0x7fff7064cf40) at /Users/sunny/innodb/bzr/5.5/storage/innobase/sync/sync0rw.c:939
#2 0x0000000100453f4a in sync_print (file=0x7fff7064cf40) at /Users/sunny/innodb/bzr/5.5/storage/innobase/sync/sync0sync.c:1542
#3 0x0000000100447378 in srv_printf_innodb_monitor (file=0x7fff7064cf40, nowait=0, trx_start=0x128c4a998, trx_end=0x128c4a990) at /Users/sunny/innodb/bzr/5.5/storage/innobase/srv/srv0srv.c:1859
#4 0x000000010040ceb1 in innodb_show_status (hton=0x100f031b0, thd=0x101161400, stat_print=0x10004a6ca <stat_print(THD*, char const*, unsigned int, char const*, unsigned int, char const*, unsigned int)>) at /Users/sunny/innodb/bzr/5.5/storage/innobase/handler/ha_innodb.cc:9149
#5 0x000000010040d129 in innobase_show_status (hton=0x100f031b0, thd=0x101161400, stat_print=0x10004a6ca <stat_print(THD*, char const*, unsigned int, char const*, unsigned int, char const*, unsigned int)>, stat_type=HA_ENGINE_STATUS) at /Users/sunny/innodb/bzr/5.5/storage/innobase/handler/ha_innodb.cc:9390
#6 0x000000010004b457 in ha_show_status (thd=0x101161400, db_type=0x100f031b0, stat=HA_ENGINE_STATUS) at /Users/sunny/innodb/bzr/5.5/sql/handler.cc:4509
#7 0x00000001001ea2c1 in mysql_execute_command (thd=0x101161400) at /Users/sunny/innodb/bzr/5.5/sql/sql_parse.cc:2245
#8 0x00000001001f013c in mysql_parse (thd=0x101161400, rawbuf=0x12689dc10 "SHOW ENGINE INNODB STATUS", length=25, parser_state=0x128c4c180) at /Users/sunny/innodb/bzr/5.5/sql/sql_parse.cc:5509
#9 0x00000001001f0d05 in dispatch_command (command=COM_QUERY, thd=0x101161400, packet=0x101121e01 "", packet_length=25) at /Users/sunny/innodb/bzr/5.5/sql/sql_parse.cc:1035
#10 0x00000001001f2164 in do_command (thd=0x101161400) at /Users/sunny/innodb/bzr/5.5/sql/sql_parse.cc:772
#11 0x00000001002c3db2 in do_handle_one_connection (thd_arg=0x101161400) at /Users/sunny/innodb/bzr/5.5/sql/sql_connect.cc:748
#12 0x00000001002c3eab in handle_one_connection (arg=0x101161400) at
/Users/sunny/innodb/bzr/5.5/sql/sql_connect.cc:684
#13 0x00007fff839ad536 in _pthread_start ()
#14 0x00007fff839ad3e9 in thread_start ()
Current language: auto; currently c
(gdb)
How to repeat:
for i in 3 3a 5 5a 7 7a 9 9a 9a 9a 12 12a 12a 12a; do perl ibtest$i>$i.out& done
Start another client that does "SHOW INNODB STATUS" at 1 second intervals
Suggested fix:
There is a comment at the top of sync0rw.c that suggests the above requirement too.
=== modified file 'storage/innobase/sync/sync0rw.c'
--- storage/innobase/sync/sync0rw.c revid:marko.makela@oracle.com-20110118103033-7u1t8xpumnzyzeb4
+++ storage/innobase/sync/sync0rw.c 2011-01-23 11:12:19 +0000
@@ -934,11 +934,16 @@
putc('\n', file);
}
- info = UT_LIST_GET_FIRST(lock->debug_list);
- while (info != NULL) {
+ rw_lock_debug_mutex_enter();
+
+ for (info = UT_LIST_GET_FIRST(lock->debug_list);
+ info != NULL;
+ info = UT_LIST_GET_NEXT(list, info)) {
+
rw_lock_debug_print(file, info);
- info = UT_LIST_GET_NEXT(list, info);
}
+
+ rw_lock_debug_mutex_exit();
}
#ifndef INNODB_RW_LOCKS_USE_ATOMICS
mutex_exit(&(lock->mutex));
Description: The rw lock debug list should be covered by the debug list mutex when traversing the lock debug info. Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: 13 at address: 0x0000000000000000 [Switching to process 22314] 0x00000001004511d1 in rw_lock_debug_print (f=0x7fff7064cf40, info=0xb000000000000) at /Users/sunny/innodb/bzr/5.5/storage/innobase/sync/sync0rw.c:1004 1004 rwt = info->lock_type; (gdb) bt #0 0x00000001004511d1 in rw_lock_debug_print (f=0x7fff7064cf40, info=0xb000000000000) at /Users/sunny/innodb/bzr/5.5/storage/innobase/sync/sync0rw.c:1004 #1 0x000000010045109c in rw_lock_list_print_info (file=0x7fff7064cf40) at /Users/sunny/innodb/bzr/5.5/storage/innobase/sync/sync0rw.c:939 #2 0x0000000100453f4a in sync_print (file=0x7fff7064cf40) at /Users/sunny/innodb/bzr/5.5/storage/innobase/sync/sync0sync.c:1542 #3 0x0000000100447378 in srv_printf_innodb_monitor (file=0x7fff7064cf40, nowait=0, trx_start=0x128c4a998, trx_end=0x128c4a990) at /Users/sunny/innodb/bzr/5.5/storage/innobase/srv/srv0srv.c:1859 #4 0x000000010040ceb1 in innodb_show_status (hton=0x100f031b0, thd=0x101161400, stat_print=0x10004a6ca <stat_print(THD*, char const*, unsigned int, char const*, unsigned int, char const*, unsigned int)>) at /Users/sunny/innodb/bzr/5.5/storage/innobase/handler/ha_innodb.cc:9149 #5 0x000000010040d129 in innobase_show_status (hton=0x100f031b0, thd=0x101161400, stat_print=0x10004a6ca <stat_print(THD*, char const*, unsigned int, char const*, unsigned int, char const*, unsigned int)>, stat_type=HA_ENGINE_STATUS) at /Users/sunny/innodb/bzr/5.5/storage/innobase/handler/ha_innodb.cc:9390 #6 0x000000010004b457 in ha_show_status (thd=0x101161400, db_type=0x100f031b0, stat=HA_ENGINE_STATUS) at /Users/sunny/innodb/bzr/5.5/sql/handler.cc:4509 #7 0x00000001001ea2c1 in mysql_execute_command (thd=0x101161400) at /Users/sunny/innodb/bzr/5.5/sql/sql_parse.cc:2245 #8 0x00000001001f013c in mysql_parse (thd=0x101161400, rawbuf=0x12689dc10 "SHOW ENGINE INNODB STATUS", length=25, parser_state=0x128c4c180) at /Users/sunny/innodb/bzr/5.5/sql/sql_parse.cc:5509 #9 0x00000001001f0d05 in dispatch_command (command=COM_QUERY, thd=0x101161400, packet=0x101121e01 "", packet_length=25) at /Users/sunny/innodb/bzr/5.5/sql/sql_parse.cc:1035 #10 0x00000001001f2164 in do_command (thd=0x101161400) at /Users/sunny/innodb/bzr/5.5/sql/sql_parse.cc:772 #11 0x00000001002c3db2 in do_handle_one_connection (thd_arg=0x101161400) at /Users/sunny/innodb/bzr/5.5/sql/sql_connect.cc:748 #12 0x00000001002c3eab in handle_one_connection (arg=0x101161400) at /Users/sunny/innodb/bzr/5.5/sql/sql_connect.cc:684 #13 0x00007fff839ad536 in _pthread_start () #14 0x00007fff839ad3e9 in thread_start () Current language: auto; currently c (gdb) How to repeat: for i in 3 3a 5 5a 7 7a 9 9a 9a 9a 12 12a 12a 12a; do perl ibtest$i>$i.out& done Start another client that does "SHOW INNODB STATUS" at 1 second intervals Suggested fix: There is a comment at the top of sync0rw.c that suggests the above requirement too. === modified file 'storage/innobase/sync/sync0rw.c' --- storage/innobase/sync/sync0rw.c revid:marko.makela@oracle.com-20110118103033-7u1t8xpumnzyzeb4 +++ storage/innobase/sync/sync0rw.c 2011-01-23 11:12:19 +0000 @@ -934,11 +934,16 @@ putc('\n', file); } - info = UT_LIST_GET_FIRST(lock->debug_list); - while (info != NULL) { + rw_lock_debug_mutex_enter(); + + for (info = UT_LIST_GET_FIRST(lock->debug_list); + info != NULL; + info = UT_LIST_GET_NEXT(list, info)) { + rw_lock_debug_print(file, info); - info = UT_LIST_GET_NEXT(list, info); } + + rw_lock_debug_mutex_exit(); } #ifndef INNODB_RW_LOCKS_USE_ATOMICS mutex_exit(&(lock->mutex));