Hi,
Is it "ok" for two threads to access the same session?
Why do I ask? I am looking at
https://bugs.launchpad.net/drizzle/+bug/439719
"Drizzle crash when running random query generator"
And I noticed that when drizzled crashes, there are two threads
messing with the same session:
The thread that crashed:
Thread 1 (process 18572 local thread 0x18707):
#0 0x00007fff82b231e6 in poll ()
#1 0x00000001001245c9 in drizzled::slot::Listen::getProtocol
(this=0x1005fed90) at slot/listen.cc:274
#2 0x0000000100010e17 in main (argc=4, argv=0x7fff5fbff3b0) at
drizzled.cc:1574
...
session = (Session *) 0x101892e00
... (Go to the end of the email for full back trace)
And then this thread is also using
Thread 10 (process 18572 thread 0x293f):
#0 0x00007fff82b416be in __semwait_signal_nocancel ()
#1 0x00007fff82b412f4 in nanosleep$NOCANCEL ()
#2 0x00007fff82b3b404 in usleep$NOCANCEL ()
#3 0x00007fff82b4ff77 in abort ()
#4 0x00007fff82b468c1 in __assert_rtn ()
#5 0x000000010000db1a in Diagnostics_area::set_ok_status
(this=0x1018669d8, session=0x101865e00, affected_rows_arg=0,
found_rows_arg=0, last_insert_id_arg=0, message_arg=0x103646580 "Rows
matched: 0 Changed: 0 Warnings: 0") at diagnostics_area.cc:89
#6 0x0000000100005ce9 in Session::my_ok (this=0x101865e00,
affected_rows=0, found_rows_arg=0, passed_id=0, message=0x103646580
"Rows matched: 0 Changed: 0 Warnings: 0") at session.h:
1288
#7 0x00000001001767cf in mysql_update (session=0x101865e00,
table_list=0x101889f48, fiel...@0x101866ff8, valu...@0x101867298,
conds=0x10188a3c8, order_num=0, order=0x0, limit=6, ignore=false) at
sql_update.cc:637
#8 0x000000010000ae0a in drizzled::statement::Update::execute
(this=0x1028aeff0) at statement/update.cc:50
#9 0x0000000100146e7b in mysql_execute_command (session=0x101865e00)
at sql_parse.cc:934
#10 0x0000000100147070 in mysql_parse (session=0x101865e00,
inBuf=0x101889e10 "UPDATE `table0_innodb_int_autoinc` SET `int_key` =
6 WHERE `enum_not_null_key` = 0 LIMIT 6", length=90,
found_semicolon=0x103646e28) at sql_parse.cc:1234
#11 0x00000001001475fc in dispatch_command (command=COM_QUERY,
session=0x101865e00, packet=0x10268b001 "UPDATE
`table0_innodb_int_autoinc` SET `int_key` = 6 WHERE
`enum_not_null_key` = 0 LIMIT 6", packet_length=90) at
sql_parse.cc:210
#12 0x0000000100104819 in Session::executeStatement (this=0x101865e00)
at session.cc:727
#13 0x0000000100104e99 in Session::run (this=0x101865e00) at
session.cc:602
#14 0x0000000100370012 in MultiThreadScheduler::runSession
(this=0x10289d4f0, session=0x101865e00) at
plugin/multi_thread/multi_thread.cc:102
#15 0x000000010036ecc8 in session_thread (arg=0x101865e00) at
plugin/multi_thread/multi_thread.cc:123
#16 0x00007fff82aa5e8b in _pthread_start ()
#17 0x00007fff82aa5d4d in thread_start ()
You see, both thread are using the session 0x101892e00 .
Thanks
-Diego
================================================
Full back trace of the thread that crashed
(gdb) bt full
#0 0x00007fff82b231e6 in poll ()
No symbol table info available.
#1 0x00000001001245c9 in drizzled::slot::Listen::getProtocol
(this=0x1005fed90) at slot/listen.cc:274
ready = 25769968
x = 1
retry = 4294967295
fd = -1
protocol = (class drizzled::plugin::Protocol *) 0x10183a200
error_count = 0
#2 0x0000000100010e17 in main (argc=4, argv=0x7fff5fbff3b0) at
drizzled.cc:1574
plugins = (drizzled::plugin::Registry &) @0x1005fed00: {
plugin_map = {
_M_t = {
_M_impl = {
<std::allocator<std::_Rb_tree_node<std::pair<const
std::basic_string<char, std::char_traits<char>, std::allocator<char>
, drizzled::plugin::Handle*> > >> = {
<__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<const
std::basic_string<char, std::char_traits<char>, std::allocator<char>
, drizzled::plugin::Handle*> > >> = {<No data fields>}, <No data
fields>},
members of std::_Rb_tree<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >,std::pair<const
std::basic_string<char, std::char_traits<char>, std::allocator<char>
, drizzled::plugin::Handle*>,std::_Select1st<std::pair<const
std::basic_string<char, std::char_traits<char>, std::allocator<char>
, drizzled::plugin::Handle*> >,std::less<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >
,std::allocator<std::pair<const std::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
drizzled::plugin::Handle*> >
::_Rb_tree_impl<std::less<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > >,false>:
_M_key_compare = {
<std::binary_function<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >,std::basic_string<char,
std::char_traits<char>, std::allocator<char> >,bool>> = {<No data
fields>}, <No data fields>},
_M_header = {
_M_color = std::_S_red,
_M_parent = 0x101121720,
_M_left = 0x10289c6d0,
_M_right = 0x10111fbb0
},
_M_node_count = 29
}
}
},
function = {
udf_registry = {
item_map = {
_M_t = {
_M_impl = {
<std::allocator<std::_Rb_tree_node<std::pair<const
std::basic_string<char, std::char_traits<char>, std::allocator<char>
, const drizzled::plugin::Function*> > >> = {
<__gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<const
std::basic_string<char, std::char_traits<char>, std::allocator<char>
, const drizzled::plugin::Function*> > >> = {<No data fields>}, <No
data fields>},
members of std::_Rb_tree<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >,std::pair<const
std::basic_string<char, std::char_traits<char>, std::allocator<char>
, const drizzled::plugin::Function*>,std::_Select1st<std::pair<const
std::basic_string<char, std::char_traits<char>, std::allocator<char>
, const drizzled::plugin::Function*>
,std::less<std::basic_string<char, std::char_traits<char>,
std::allocator<char> > >,std::allocator<std::pair<const
std::basic_string<char, std::char_traits<char>, std::allocator<char>
, const drizzled::plugin::Function*> >
::_Rb_tree_impl<std::less<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > >,false>:
_M_key_compare = {
<std::binary_function<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >,std::basic_string<char,
std::char_traits<char>, std::allocator<char> >,bool>> = {<No data
fields>}, <No data fields>},
_M_header = {
_M_color = std::_S_red,
_M_parent = 0x10111fc90,
_M_left = 0x10289c570,
_M_right = 0x10111fc40
},
_M_node_count = 42
}
}
},
item_set = {
_M_t = {
_M_impl = {
<std::allocator<std::_Rb_tree_node<const
drizzled::plugin::Function*> >> = {
<__gnu_cxx::new_allocator<std::_Rb_tree_node<const
drizzled::plugin::Function*> >> = {<No data fields>}, <No data
fields>},
members of std::_Rb_tree<const
drizzled::plugin::Function*,const
drizzled::plugin::Function*,std::_Identity<const
drizzled
::plugin::Function*>,drizzled::internal::RegistryMapCompare<const
drizzled::plugin::Function*>,std::allocator<const
drizzled::plugin::Function*>
::_Rb_tree_impl<drizzled::internal::RegistryMapCompare<const
drizzled::plugin::Function*>,false>:
_M_key_compare = {<No data fields>},
_M_header = {
_M_color = std::_S_red,
_M_parent = 0x102899900,
_M_left = 0x10289c4d0,
_M_right = 0x10111fc10
},
_M_node_count = 19
}
}
}
}
},
listen = {
listen_list = {
<std::_Vector_base<const
drizzled::plugin::Listen*,std::allocator<const
drizzled::plugin::Listen*> >> = {
_M_impl = {
<std::allocator<const drizzled::plugin::Listen*>> = {
<__gnu_cxx::new_allocator<const
drizzled::plugin::Listen*>> = {<No data fields>}, <No data fields>},
members of std::_Vector_base<const
drizzled::plugin::Listen*,std::allocator<const
drizzled::plugin::Listen*> >::_Vector_impl:
_M_start = 0x101120170,
_M_finish = 0x101120178,
_M_end_of_storage = 0x101120178
}
}, <No data fields>},
listen_fd_list = {
<std::_Vector_base<const
drizzled::plugin::Listen*,std::allocator<const
drizzled::plugin::Listen*> >> = {
_M_impl = {
<std::allocator<const drizzled::plugin::Listen*>> = {
<__gnu_cxx::new_allocator<const
drizzled::plugin::Listen*>> = {<No data fields>}, <No data fields>},
members of std::_Vector_base<const
drizzled::plugin::Listen*,std::allocator<const
drizzled::plugin::Listen*> >::_Vector_impl:
_M_start = 0x10289c990,
_M_finish = 0x10289c9a0,
_M_end_of_storage = 0x10289c9a0
}
}, <No data fields>},
fd_list = 0x10289c760,
fd_count = 3,
wakeup_pipe = {103, 112}
}
}
protocol = (class drizzled::plugin::Protocol *) 0x10183a200
session = (Session *) 0x101892e00
--
Diego Medina
Web Developer
http://www.fmpwizard.com
_______________________________________________
Mailing list: https://launchpad.net/~drizzle-discuss
Post to : [email protected]
Unsubscribe : https://launchpad.net/~drizzle-discuss
More help : https://help.launchpad.net/ListHelp