• Georgi Kodinov's avatar
    Bug #42419: Server crash with "Pure virtual method called" on two concurrent · 29476d87
    Georgi Kodinov authored
    connections
    The problem is that tables can enter open table cache for a thread without 
    being properly cleaned up. This can happen if make_join_statistics() fails 
    to read a const table because of e.g. a deadlock. It does set a member of 
    TABLE structure to a value it allocates, but doesn't clean-up this setting 
    on error nor does it set the rest of the members in JOIN to allow for 
    automatic cleanup.
    As a result when such an error occurs and the next statement depends re-uses 
    the table from the open tables cache it will get it with this 
    TABLE::reginfo.join_tab pointing to a memory area that's freed.
    Fixed by making sure make_join_statistics() cleans up TABLE::reginfo.join_tab 
    on error.
    
    mysql-test/r/innodb_mysql.result:
      Bug #42419: test case
    mysql-test/t/innodb_mysql-master.opt:
      Bug #42419: increase the timeout so it covers te conservative 
      sleep 3 in the test
    mysql-test/t/innodb_mysql.test:
      Bug #42419: test case
    sql/sql_select.cc:
      Bug #42419: clean up the members of TABLE on failure in 
              make_join_statisitcs()
    29476d87
innodb_mysql.result 35 KB