• Georgi Kodinov's avatar
    Bug #42419: Server crash with "Pure virtual method called" on two concurrent · b2c161c1
    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.
    b2c161c1
sql_select.cc 502 KB