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

Reply via email to