Details
-
Type:
Bug
-
Status: Closed
-
Resolution: Not a Bug
-
Affects Version/s: None
-
Fix Version/s: None
-
Component/s: None
-
Labels:
Description
pbxt.multi_update test hangs on Windows (32 bit, debug build), but not on Linux.
I run
perl mysql-test-run.pl -suite=pbxt --mysqld=-default-storage-engine=pbxt multi_update
and it's running forever, with mysqld.exe consuming 100% CPU. If I attach a debugger, I observe the following:
mysqld.exe!_RTC_CheckEsp() C++
> mysqld.exe!xt_p_mutex_lock(xt_mutex_struct * mx=0x02b711e0) Line 96 C++
mysqld.exe!XTTableSeq::ts_set_op_seq(XTTabCachePage * page=0x0a491128) Line 107 + 0xc bytes C++
mysqld.exe!XTTabCache::xt_tc_write(XTOpenFile * file=0x09944798, unsigned int ref_id=1627014, unsigned int inc=0, unsigned int size=4, unsigned char * data=0x0965e0b8, unsigned int * op_seq=0x0965e0ac, int read=1, XTThread * thread=0x02b158f0) Line 219 + 0x14 bytes C++
mysqld.exe!xt_tab_set_row(XTOpenTable * ot=0x09855388, unsigned int status=30, unsigned int row_id=1627014, unsigned int var_rec_id=1627014) Line 3868 + 0x2d bytes C++
mysqld.exe!xt_tab_new_record(XTOpenTable * ot=0x09855388, unsigned char * rec_buf=0x02b0dd68) Line 4388 + 0x13 bytes C++
mysqld.exe!ha_pbxt::write_row(unsigned char * buf=0x02b0dd68) Line 2356 + 0x13 bytes C++
mysqld.exe!handler::ha_write_row(unsigned char * buf=0x02b0dd68) Line 4630 + 0x16 bytes C++
mysqld.exe!write_record(THD * thd=0x02a49690, st_table * table=0x02b35040, st_copy_info * info=0x02b22038) Line 1607 + 0x12 bytes C++
mysqld.exe!select_insert::send_data(List<Item> & values=
mysqld.exe!end_send(JOIN * join=0x02b22090, st_join_table * join_tab=0x02b6c4a0, bool end_of_records=false) Line 12328 + 0x25 bytes C++
mysqld.exe!evaluate_join_record(JOIN * join=0x02b22090, st_join_table * join_tab=0x02b6c310, int error=0) Line 11548 + 0x19 bytes C++
mysqld.exe!sub_select(JOIN * join=0x02b22090, st_join_table * join_tab=0x02b6c310, bool end_of_records=false) Line 11439 + 0x11 bytes C++
mysqld.exe!do_select(JOIN * join=0x02b22090, List<Item> * fields=0x02b231f0, st_table * table=0x00000000, Procedure * procedure=0x00000000) Line 11189 + 0xf bytes C++
mysqld.exe!JOIN::exec() Line 2231 + 0x19 bytes C++
mysqld.exe!mysql_select(THD * thd=0x02a49690, Item * * * rref_pointer_array=0x02a4ac3c, TABLE_LIST * tables=0x02b21e20, unsigned int wild_num=0, List<Item> & fields={...}
, Item * conds=0x00000000, unsigned int og_num=0, st_order * order=0x00000000, st_order * group=0x00000000, Item * having=0x00000000, st_order * proc_param=0x00000000, unsigned __int64 select_options=3489942016, select_result * result=0x02b22010, st_select_lex_unit * unit=0x02a4a8c8, st_select_lex * select_lex=0x02a4ab40) Line 2427 C++
mysqld.exe!handle_select(THD * thd=0x02a49690, st_lex * lex=0x02a4a868, select_result * result=0x02b22010, unsigned long setup_tables_done_option=1073741824) Line 278 + 0x9e bytes C++
mysqld.exe!mysql_execute_command(THD * thd=0x02a49690) Line 3239 + 0x19 bytes C++
mysqld.exe!mysql_parse(THD * thd=0x02a49690, const char * inBuf=0x02b217a0, unsigned int length=39, const char * * found_semicolon=0x0965fd18) Line 5979 + 0x9 bytes C++
mysqld.exe!dispatch_command(enum_server_command command=COM_QUERY, THD * thd=0x02a49690, char * packet=0x02b060e1, unsigned int packet_length=39) Line 1223 + 0x1e bytes C++
mysqld.exe!do_command(THD * thd=0x02a49690) Line 862 + 0x1b bytes C++
mysqld.exe!handle_one_connection(void * arg=0x02a49690) Line 1130 + 0x9 bytes C++
mysqld.exe!pthread_start(void * param=0x02b47da8) Line 87 + 0x9 bytes C
----------
kernel32.dll!7c809574()
> mysqld.exe!xt_p_cond_timedwait(pthread_cond_t * cond=0x029f0298, xt_mutex_struct * mt=0x029f0274, timespec * abstime=0x0935fe94) Line 377 + 0x17 bytes C++
mysqld.exe!xt_timed_wait_cond(XTThread * self=0x029fc950, pthread_cond_t * cond=0x029f0298, xt_mutex_struct * mutex=0x029f0274, unsigned long milli_sec=400) Line 1967 + 0x11 bytes C++
mysqld.exe!xres_cp_wait_for_log_writer(XTThread * self=0x029fc950, XTDatabase * db=0x029c3fc8, unsigned long milli_secs=400) Line 2464 + 0x20 bytes C++
mysqld.exe!xres_cp_main(XTThread * self=0x029fc950) Line 2495 + 0x12 bytes C++
mysqld.exe!xres_cp_run_thread(XTThread * self=0x029fc950) Line 2568 + 0x9 bytes C++
mysqld.exe!thr_main(void * data=0x08bffb70) Line 1022 + 0x9 bytes C++
mysqld.exe!pthread_start(void * param=0x01c3aca8) Line 87 + 0x9 bytes C
mysqld.exe!_callthreadstart() Line 293 + 0xf bytes C
mysqld.exe!_threadstart(void * ptd=0x029fed68) Line 277 C
kernel32.dll!7c80b713()
--------------
> mysqld.exe!xt_p_mutex_unlock(xt_mutex_struct * mx=0x0168d384) Line 103 + 0xc bytes C++
mysqld.exe!xt_unlock_mutex(XTThread * self=0x029f7588, xt_mutex_struct * mx=0x0168d384) Line 1726 + 0x9 bytes C++
mysqld.exe!xt_wr_wake_freeer(XTThread * self=0x029f7588) Line 837 + 0x2c bytes C++
mysqld.exe!xt_xres_apply_in_order(XTThread * self=0x029f7588, XTWriterState * ws=0x029f7ac8, unsigned int log_id=2, unsigned __int64 log_offset=21722494, XTXactLogBuffer * record=0x02afda98) Line 1474 + 0x9 bytes C++
mysqld.exe!xlog_wr_main(XTThread * self=0x029f7588) Line 2540 + 0x23 bytes C++
mysqld.exe!xlog_wr_run_thread(XTThread * self=0x029f7588) Line 2583 + 0x9 bytes C++
mysqld.exe!thr_main(void * data=0x08bffb70) Line 1022 + 0x9 bytes C++
mysqld.exe!pthread_start(void * param=0x01c3aca8) Line 87 + 0x9 bytes C
mysqld.exe!_callthreadstart() Line 293 + 0xf bytes C
mysqld.exe!_threadstart(void * ptd=0x029f99a0) Line 277 C
kernel32.dll!7c80b713()
> mysqld.exe!xt_p_cond_timedwait(pthread_cond_t * cond=0x029e6290, xt_mutex_struct * mt=0x029e626c, timespec * abstime=0x0915fe90) Line 377 + 0x17 bytes C++
mysqld.exe!xt_timed_wait_cond(XTThread * self=0x029f2c50, pthread_cond_t * cond=0x029e6290, xt_mutex_struct * mutex=0x029e626c, unsigned long milli_sec=120000) Line 1967 + 0x11 bytes C++
mysqld.exe!dl_co_wait(XTThread * self=0x029f2c50, XTDatabase * db=0x029c3fc8, unsigned int secs=120) Line 1709 + 0x26 bytes C++
mysqld.exe!dl_co_main(XTThread * self=0x029f2c50, int once_off=0) Line 2008 + 0xf bytes C++
mysqld.exe!dl_run_co_thread(XTThread * self=0x029f2c50) Line 2046 + 0xb bytes C++
mysqld.exe!thr_main(void * data=0x08bffb70) Line 1022 + 0x9 bytes C++
mysqld.exe!pthread_start(void * param=0x01c3aca8) Line 87 + 0x9 bytes C
mysqld.exe!_callthreadstart() Line 293 + 0xf bytes C
mysqld.exe!_threadstart(void * ptd=0x029f5068) Line 277 C
If I then kill mysqld.exe, I get this:
pbxt.multi_update [ fail ]
Test ended at 2009-10-08 01:39:52
CURRENT_TEST: pbxt.multi_update
mysqltest: At line 339: query 'insert into t1 select a+@d,b+@d from t1' failed: 2013: Lost connection to MySQL server during query
I've tried several times and every time it was stuck at exactly this query.
Gliffy Diagrams
Attachments
Activity
- All
- Comments
- Work Log
- History
- Activity
- Transitions
Re: pbxt.multi_update test repeatably hangs on windows
Hi Sergey,
Thanks for the bug report.
It is odd that we get a hang here because the lock that is acquired by the writing thread is always released 2 lines later. Maybe it has something to do with the way mutexes are implemented on Windows, in general.
We will try to repeat the error.