• unknown's avatar
    Recommit of antonys previous commit. · fb27979e
    unknown authored
    Bug#21413
    "Engine table handler used by multiple threads in REPLACE DELAYED"
    When executing a REPLACE DELAYED statement, the storage engine
    ::extra() method was invoked by a different thread than the thread
    which has acquired the handler instance.
    
    This did not cause problems within the current server and with
    the current storage engines.
    But it has the potential to confuse future storage engines.
    
    Added code to avoid surplus calls to extra() method in case of DELAYED
    which avoids calling storage engine from a different thread than
    expected.
    
    No test case.
    This change does not change behavior in conjunction with current
    storage engines. So it cannot be tested by the regression test suite.
    
    
    sql/sql_insert.cc:
      Bug#21413
      When performing DELAYED operations, we should not call
      the storage engine methods from the 'wrong' context.
      Ensure that the calls to the methods are appropiately guarded
      by either moving calls to sections where the lock_type is checked.
      No need to copy all elements of TABLE_LIST when opening table
      using open_ltable().
    fb27979e
sql_insert.cc 56 KB