Bug #39024 Crash in DeferredIndex::detachTransaction
Submitted: 25 Aug 2008 21:40 Modified: 9 Jan 2009 13:43
Reporter: Vladislav Vaintroub Email Updates:
Status: Closed Impact on me:
Category:MySQL Server: Falcon storage engine Severity:S3 (Non-critical)
Version: OS:Any
Assigned to: Vladislav Vaintroub CPU Architecture:Any

[25 Aug 2008 21:40] Vladislav Vaintroub
During  SystemQA tests, including DDL , falcon crashes at drop table 
with following callstack. The assertion checks the state of the SyncObject to be None.

Error::error(char const*, ...)+0x7a 
Error::assertionFailed(char const*, char const*, int)
TransactionManager::dropTable(Table*, Transaction*)+0x59
Database::dropTable(Table*, Transaction*)+0xf6 

DeferredIndex::detachTransaction() looks like this
void DeferredIndex::detachTransaction(void)
    Sync sync(&syncObject, "DeferredIndex::detachTransaction");

it release reference to itself which eventually ends up in 
delete this;

while lock to this::SyncObject can still be held (it can be released as well, but not in all cases).

How to repeat:
Run systemQA tests on system QA machines.

Suggested fix:
sync.unlock() unconditionally before doing releaseRef()
[25 Aug 2008 21:46] Vladislav Vaintroub
Hmm, not sure analysis is correct. Seems like sync.unlock()  is always called, and eventually Index::detachDeferredIndex() locks and unlocks it again.
[27 Aug 2008 21:53] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:


2805 Vladislav Vaintroub	2008-08-27
      Bug#39024 Crash in DeferredIndex::detachTransaction 
      DeferredIndex::syncObject is accessed even after 
      "this" object is destroyed in releaseRef().
      I put a block at the start of function and before releaseRef()
      to force the destructor of sync before  the object itself 
      is destroyed.
[6 Nov 2008 5:19] Kevin Lewis
The original fix for this bug stopped the assert, but introduced the following bugs.  See Bug#39711 for the final patch which fixed these also.
Bug#39711 "Running falcon_bug_34351_C shows increasing memory usage"
Bug#39795 "Falcon: Online add index does not support index with non-null columns"
Bug#39796 "Falcon: Reference count decrement not atomic"
[9 Jan 2009 13:43] MC Brown
Internal only. No documentation needed.