Bug #37725 Falcon: assertion in waitForTransaction "waitingFor was not NULL"
Submitted: 29 Jun 2008 11:15 Modified: 1 Oct 2008 12:11
Reporter: Philip Stoev Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Falcon storage engine Severity:S1 (Critical)
Version:6.0-falcon OS:Any
Assigned to: Vladislav Vaintroub CPU Architecture:Any

[29 Jun 2008 11:15] Philip Stoev
Description:
When executing a workload containing randomly-generated DML queries, mysqld crashed as follows:

#0  0x00110416 in __kernel_vsyscall ()
#1  0x00581c78 in pthread_kill () from /lib/libpthread.so.0
#2  0x0844a1c9 in write_core (sig=6) at stacktrace.c:302
#3  0x082a464c in handle_segfault (sig=6) at mysqld.cc:2635
#4  <signal handler called>
#5  0x00110416 in __kernel_vsyscall ()
#6  0x00584fe0 in raise () from /lib/libpthread.so.0
#7  0x0851c754 in Error::debugBreak () at Error.cpp:94
#8  0x0851c7d1 in Error::error (string=0x88a1474 "waitingFor was not NULL") at Error.cpp:71
#9  0x084dddfc in Transaction::waitForTransaction (this=0xb71f8468, transaction=0xb71feee0, transId=0, deadlock=0xad64fa63) at Transaction.cpp:1014
#10 0x084de00f in Transaction::getRelativeState (this=0xb71f8468, transaction=0xb71feee0, transId=29371, flags=1) at Transaction.cpp:872
#11 0x084de0d6 in Transaction::getRelativeState (this=0xb71f8468, record=0xa9ad0738, flags=1) at Transaction.cpp:826
#12 0x084cfdc3 in Table::fetchForUpdate (this=0xb74f9d98, transaction=0xb71f8468, source=0xa9ad0738, usingIndex=true) at Table.cpp:3474
#13 0x084bb191 in StorageDatabase::nextIndexed (this=0xb716f130, storageTable=0xb4fbb2c8, recordBitmap=0xb720e178, recordNumber=1, lockForUpdate=true)
    at StorageDatabase.cpp:426
#14 0x084c1a27 in StorageTable::nextIndexed (this=0xb4fbb2c8, recordNumber=0, lockForUpdate=true) at StorageTable.cpp:182
#15 0x084b4621 in StorageInterface::index_next (this=0xa1e61c8, buf=0xa1e6390 "ะช") at ha_falcon.cpp:1589
#16 0x084b3036 in StorageInterface::read_range_first (this=0xa1e61c8, start_key=0x0, end_key=0xa1e626c, eq_range_arg=false, sorted=false)
    at ha_falcon.cpp:1557
#17 0x083cf9cf in handler::multi_range_read_next (this=0xa1e61c8, range_info=0xad64fd20) at handler.cc:4267
#18 0x083aed48 in QUICK_RANGE_SELECT::get_next (this=0xa2b12d8) at opt_range.cc:8518
#19 0x083c995b in rr_quick (info=0xad64fdcc) at records.cc:298
#20 0x083cd1c8 in find_all_keys (param=0xad6500a4, select=0xad500dc0, sort_keys=0xa3c5660, buffpek_pointers=0xad64ff1c, tempfile=0xad64ffe0, indexfile=0x0)
    at filesort.cc:520
#21 0x083cddeb in filesort (thd=0xa2de3e0, table=0xa36f5d0, sortorder=0xad500ec8, s_length=1, select=0xad500dc0, max_rows=88, sort_positions=true,
    examined_rows=0xad650368) at filesort.cc:245
#22 0x0835c9a4 in mysql_update (thd=0xa2de3e0, table_list=0xad500730, fields=@0xa2df82c, values=@0xa2dfa58, conds=0xad500b58, order_num=1, order=0xad500cd0,
    limit=88, handle_duplicates=DUP_ERROR, ignore=false) at sql_update.cc:417
#23 0x082b7bd9 in mysql_execute_command (thd=0xa2de3e0) at sql_parse.cc:2843
#24 0x082be6ab in mysql_parse (thd=0xa2de3e0, inBuf=0xad500618 "UPDATE F AS X SET int_nokey = 76 WHERE X . pk < 17 ORDER BY RAND ( ) LIMIT 88", length=77,
    found_semicolon=0xad651260) at sql_parse.cc:5799
#25 0x082bf147 in dispatch_command (command=COM_QUERY, thd=0xa2de3e0,
    packet=0xa31bd69 "UPDATE F AS X SET int_nokey = 76 WHERE X . pk < 17 ORDER BY RAND ( ) LIMIT 88", packet_length=77) at sql_parse.cc:1058
#26 0x082c0408 in do_command (thd=0xa2de3e0) at sql_parse.cc:731
#27 0x082ada2e in handle_one_connection (arg=0xa2de3e0) at sql_connect.cc:1134
#28 0x0057d32f in start_thread () from /lib/libpthread.so.0
#29 0x0049a27e in clone () from /lib/libc.so.6

The crash is in this segment:

(gdb) list
1009                    return state;
1010            }
1011
1012
1013            if (!COMPARE_EXCHANGE_POINTER(&waitingFor, NULL, transaction))
1014                    FATAL("waitingFor was not NULL");
1015
1016            volatile Transaction *trans;
1017            for (trans = transaction->waitingFor; trans; trans = trans->waitingFor)
1018                    if (trans == this)

How to repeat:
A test case will be provided if the crash happens again...
[29 Jun 2008 11:15] Philip Stoev
(gdb) print * waitingFor
$4 = {_vptr.Transaction = 0x88a1a10, connection = 0xad813138, database = 0xb7370640, transactionId = 29371, oldestActive = 29287, blockedBy = 0,
  curSavePointId = 3, next = 0xb71f8468, prior = 0xb7222240, waitingFor = 0x0, savePoints = 0xb71fef4c, freeSavePoints = 0xb71fef38, localSavePoints = {{
      next = 0x0, savepoints = 0xcccccccc, backloggedRecords = 0xcccccccc, records = 0xcccccccc, id = -858993460}, {next = 0xb71fef10,
      savepoints = 0xcccccccc, backloggedRecords = 0xcccccccc, records = 0xcccccccc, id = -858993460}, {next = 0xb71fef24, savepoints = 0x0,
      backloggedRecords = 0x0, records = 0xb71ff174, id = 3}, {next = 0xb71fef60, savepoints = 0x0, backloggedRecords = 0x0, records = 0xb71ff174, id = 2}, {
      next = 0x0, savepoints = 0x0, backloggedRecords = 0x0, records = 0xb71ff174, id = 1}}, deferredIndexes = 0xad81fa98, thread = 0xad813058,
  blockingRecord = 0x0, backloggedRecords = 0x0, startTime = 775, deferredIndexCount = 1, statesAllocated = 9, isolationLevel = 8, xidLength = 0,
  mySqlThreadId = 9, xid = 0x0, states = 0xb7217cc8, commitTriggers = false, systemTransaction = false, hasUpdates = true, writePending = true,
  pendingPageWrites = false, hasLocks = true, syncActive = {<SynchronizationObject> = {_vptr.SynchronizationObject = 0x889f458}, monitorCount = 0,
    mutex = {<SynchronizationObject> = {_vptr.SynchronizationObject = 0x88ab7b8}, holder = 0x0, mutex = {__data = {__lock = 0, __count = 0, __owner = 0,
          __kind = 0, __nusers = 0, {__spins = 0, __list = {__next = 0x0}}}, __size = '\0' <repeats 23 times>, __align = 0}}, queue = 0xb71abe60,
    exclusiveThread = 0xad813058, readers = 0, waiters = 5, lockState = -1, stalls = 6, objectId = 141846, sharedCount = 0, collisionCount = 0,
    exclusiveCount = 1, waitCount = 6, queueLength = 15, where = 0x88a1454 "Transaction::waitForTransaction", name = 0xb7200c58 "Transaction::syncActive"},
  syncIndexes = {<SynchronizationObject> = {_vptr.SynchronizationObject = 0x889f458}, monitorCount = 0, mutex = {<SynchronizationObject> = {
        _vptr.SynchronizationObject = 0x88ab7b8}, holder = 0x0, mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __kind = 0, __nusers = 0, {
            __spins = 0, __list = {__next = 0x0}}}, __size = '\0' <repeats 23 times>, __align = 0}}, queue = 0x0, exclusiveThread = 0x0, readers = 0,
    waiters = 0, lockState = 0, stalls = 0, objectId = 141847, sharedCount = 0, collisionCount = 0, exclusiveCount = 1, waitCount = 0, queueLength = 0,
    where = 0x88a1237 "Transaction::add", name = 0xb71ff1f8 "Transaction::syncIndexes"}, syncObject = {<SynchronizationObject> = {
      _vptr.SynchronizationObject = 0x889f458}, monitorCount = 0, mutex = {<SynchronizationObject> = {_vptr.SynchronizationObject = 0x88ab7b8},
      holder = 0x0, mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __kind = 0, __nusers = 0, {__spins = 0, __list = {__next = 0x0}}},
        __size = '\0' <repeats 23 times>, __align = 0}}, queue = 0x0, exclusiveThread = 0x0, readers = 0, waiters = 0, lockState = 0, stalls = 0,
    objectId = 141848, sharedCount = 0, collisionCount = 0, exclusiveCount = 2, waitCount = 0, queueLength = 0, where = 0x88a17aa "Transaction::initialize",
    name = 0xb71f8e30 "Transaction::syncObject"}, syncSavepoints = {<SynchronizationObject> = {_vptr.SynchronizationObject = 0x889f458}, monitorCount = 0,
    mutex = {<SynchronizationObject> = {_vptr.SynchronizationObject = 0x88ab7b8}, holder = 0x0, mutex = {__data = {__lock = 0, __count = 0, __owner = 0,
          __kind = 0, __nusers = 0, {__spins = 0, __list = {__next = 0x0}}}, __size = '\0' <repeats 23 times>, __align = 0}}, queue = 0x0,
    exclusiveThread = 0x0, readers = 0, waiters = 0, lockState = 0, stalls = 0, objectId = 141849, sharedCount = 0, collisionCount = 0, exclusiveCount = 0,
    waitCount = 0, queueLength = 0, where = 0x0, name = 0xb71ff230 "Transaction::syncSavepoints"}, totalRecordData = 0, totalRecords = 399,
  chilledRecords = 0, chilledBytes = 0, thawedRecords = 0, thawedBytes = 0, debugThawedRecords = 0, debugThawedBytes = 0, committedRecords = 0,
  deletedRecords = 0, chillPoint = 0xb71ff174, scanIndexCount = 2, numberStates = 8, state = 0, dependencies = 7, useCount = 15, inList = 1,
  firstRecord = 0xa9ad0738, lastRecord = 0xa9ad54c8}
[29 Jun 2008 11:15] Philip Stoev
(gdb) print * transaction
$7 = {_vptr.Transaction = 0x88a1a10, connection = 0xad813138, database = 0xb7370640, transactionId = 29371, oldestActive = 29287, blockedBy = 0,
  curSavePointId = 3, next = 0xb71f8468, prior = 0xb7222240, waitingFor = 0x0, savePoints = 0xb71fef4c, freeSavePoints = 0xb71fef38, localSavePoints = {{
      next = 0x0, savepoints = 0xcccccccc, backloggedRecords = 0xcccccccc, records = 0xcccccccc, id = -858993460}, {next = 0xb71fef10,
      savepoints = 0xcccccccc, backloggedRecords = 0xcccccccc, records = 0xcccccccc, id = -858993460}, {next = 0xb71fef24, savepoints = 0x0,
      backloggedRecords = 0x0, records = 0xb71ff174, id = 3}, {next = 0xb71fef60, savepoints = 0x0, backloggedRecords = 0x0, records = 0xb71ff174, id = 2}, {
      next = 0x0, savepoints = 0x0, backloggedRecords = 0x0, records = 0xb71ff174, id = 1}}, deferredIndexes = 0xad81fa98, thread = 0xad813058,
  blockingRecord = 0x0, backloggedRecords = 0x0, startTime = 775, deferredIndexCount = 1, statesAllocated = 9, isolationLevel = 8, xidLength = 0,
  mySqlThreadId = 9, xid = 0x0, states = 0xb7217cc8, commitTriggers = false, systemTransaction = false, hasUpdates = true, writePending = true,
  pendingPageWrites = false, hasLocks = true, syncActive = {<SynchronizationObject> = {_vptr.SynchronizationObject = 0x889f458}, monitorCount = 0,
    mutex = {<SynchronizationObject> = {_vptr.SynchronizationObject = 0x88ab7b8}, holder = 0x0, mutex = {__data = {__lock = 0, __count = 0, __owner = 0,
          __kind = 0, __nusers = 0, {__spins = 0, __list = {__next = 0x0}}}, __size = '\0' <repeats 23 times>, __align = 0}}, queue = 0xb71abe60,
    exclusiveThread = 0xad813058, readers = 0, waiters = 5, lockState = -1, stalls = 6, objectId = 141846, sharedCount = 0, collisionCount = 0,
    exclusiveCount = 1, waitCount = 6, queueLength = 15, where = 0x88a1454 "Transaction::waitForTransaction", name = 0xb7200c58 "Transaction::syncActive"},
  syncIndexes = {<SynchronizationObject> = {_vptr.SynchronizationObject = 0x889f458}, monitorCount = 0, mutex = {<SynchronizationObject> = {
        _vptr.SynchronizationObject = 0x88ab7b8}, holder = 0x0, mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __kind = 0, __nusers = 0, {
            __spins = 0, __list = {__next = 0x0}}}, __size = '\0' <repeats 23 times>, __align = 0}}, queue = 0x0, exclusiveThread = 0x0, readers = 0,
    waiters = 0, lockState = 0, stalls = 0, objectId = 141847, sharedCount = 0, collisionCount = 0, exclusiveCount = 1, waitCount = 0, queueLength = 0,
    where = 0x88a1237 "Transaction::add", name = 0xb71ff1f8 "Transaction::syncIndexes"}, syncObject = {<SynchronizationObject> = {
      _vptr.SynchronizationObject = 0x889f458}, monitorCount = 0, mutex = {<SynchronizationObject> = {_vptr.SynchronizationObject = 0x88ab7b8},
      holder = 0x0, mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __kind = 0, __nusers = 0, {__spins = 0, __list = {__next = 0x0}}},
        __size = '\0' <repeats 23 times>, __align = 0}}, queue = 0x0, exclusiveThread = 0x0, readers = 0, waiters = 0, lockState = 0, stalls = 0,
    objectId = 141848, sharedCount = 0, collisionCount = 0, exclusiveCount = 2, waitCount = 0, queueLength = 0, where = 0x88a17aa "Transaction::initialize",
    name = 0xb71f8e30 "Transaction::syncObject"}, syncSavepoints = {<SynchronizationObject> = {_vptr.SynchronizationObject = 0x889f458}, monitorCount = 0,
    mutex = {<SynchronizationObject> = {_vptr.SynchronizationObject = 0x88ab7b8}, holder = 0x0, mutex = {__data = {__lock = 0, __count = 0, __owner = 0,
          __kind = 0, __nusers = 0, {__spins = 0, __list = {__next = 0x0}}}, __size = '\0' <repeats 23 times>, __align = 0}}, queue = 0x0,
    exclusiveThread = 0x0, readers = 0, waiters = 0, lockState = 0, stalls = 0, objectId = 141849, sharedCount = 0, collisionCount = 0, exclusiveCount = 0,
    waitCount = 0, queueLength = 0, where = 0x0, name = 0xb71ff230 "Transaction::syncSavepoints"}, totalRecordData = 0, totalRecords = 399,
  chilledRecords = 0, chilledBytes = 0, thawedRecords = 0, thawedBytes = 0, debugThawedRecords = 0, debugThawedBytes = 0, committedRecords = 0,
  deletedRecords = 0, chillPoint = 0xb71ff174, scanIndexCount = 2, numberStates = 8, state = 0, dependencies = 7, useCount = 15, inList = 1,
  firstRecord = 0xa9ad0738, lastRecord = 0xa9ad54c8}
[29 Jun 2008 15:32] Philip Stoev
Grammar file for bug 37726

Attachment: bug37725.yy (text/plain), 1.52 KiB.

[29 Jun 2008 15:34] Philip Stoev
To run the test case, please check out the mysql-test-extra-6.0 tree. Then run:

$ cd mysql-test-extra-6.0/mysql-test/gentest
$ ./runall.pl --basedir=/path/to/6.0-falcon --engine=Falcon --grammar=/location/of/bug37726.yy

The script will start the server and proceed to run random queries against it. Crash should happen within 5 minutes. Please let me know if a simpler test case is required.
[7 Jul 2008 21:57] Kevin Lewis
Vlad,

Will you take a high priority look at this?  Philip thinks it is a regression and thus may be a showstopper for 6.0.6.
[8 Jul 2008 10:24] Philip Stoev
Thread stacks for bug 37725

Attachment: bug37725.threads (text/plain), 37.63 KiB.

[8 Jul 2008 11:14] Philip Stoev
(gdb) print this->waitingFor
$1 = (volatile Transaction *) 0xb71feee0

(gdb) print * this->waitingFor
$2 = {_vptr.Transaction = 0x88a1a10, connection = 0xad813138,
  database = 0xb7370640, transactionId = 29371, oldestActive = 29287,
  blockedBy = 0, curSavePointId = 3, next = 0xb71f8468, prior = 0xb7222240,
  waitingFor = 0x0, savePoints = 0xb71fef4c, freeSavePoints = 0xb71fef38,
  localSavePoints = {{next = 0x0, savepoints = 0xcccccccc,
      backloggedRecords = 0xcccccccc, records = 0xcccccccc, id = -858993460}, {
      next = 0xb71fef10, savepoints = 0xcccccccc,
      backloggedRecords = 0xcccccccc, records = 0xcccccccc, id = -858993460}, {
      next = 0xb71fef24, savepoints = 0x0, backloggedRecords = 0x0,
      records = 0xb71ff174, id = 3}, {next = 0xb71fef60, savepoints = 0x0,
      backloggedRecords = 0x0, records = 0xb71ff174, id = 2}, {next = 0x0,
      savepoints = 0x0, backloggedRecords = 0x0, records = 0xb71ff174,
      id = 1}}, deferredIndexes = 0xad81fa98, thread = 0xad813058,
  blockingRecord = 0x0, backloggedRecords = 0x0, startTime = 775,
  deferredIndexCount = 1, statesAllocated = 9, isolationLevel = 8,
  xidLength = 0, mySqlThreadId = 9, xid = 0x0, states = 0xb7217cc8,
  commitTriggers = false, systemTransaction = false, hasUpdates = true,
  writePending = true, pendingPageWrites = false, hasLocks = true,
  syncActive = {<SynchronizationObject> = {
      _vptr.SynchronizationObject = 0x889f458}, monitorCount = 0,
    mutex = {<SynchronizationObject> = {
        _vptr.SynchronizationObject = 0x88ab7b8}, holder = 0x0, mutex = {
        __data = {__lock = 0, __count = 0, __owner = 0, __kind = 0,
          __nusers = 0, {__spins = 0, __list = {__next = 0x0}}},
        __size = '\0' <repeats 23 times>, __align = 0}}, queue = 0xb71abe60,
    exclusiveThread = 0xad813058, readers = 0, waiters = 5, lockState = -1,
    stalls = 6, objectId = 141846, sharedCount = 0, collisionCount = 0,
    exclusiveCount = 1, waitCount = 6, queueLength = 15,
    where = 0x88a1454 "Transaction::waitForTransaction",
    name = 0xb7200c58 "Transaction::syncActive"},
  syncIndexes = {<SynchronizationObject> = {
      _vptr.SynchronizationObject = 0x889f458}, monitorCount = 0,
    mutex = {<SynchronizationObject> = {
        _vptr.SynchronizationObject = 0x88ab7b8}, holder = 0x0, mutex = {
        __data = {__lock = 0, __count = 0, __owner = 0, __kind = 0,
          __nusers = 0, {__spins = 0, __list = {__next = 0x0}}},
        __size = '\0' <repeats 23 times>, __align = 0}}, queue = 0x0,
    exclusiveThread = 0x0, readers = 0, waiters = 0, lockState = 0,
    stalls = 0, objectId = 141847, sharedCount = 0, collisionCount = 0,
    exclusiveCount = 1, waitCount = 0, queueLength = 0,
    where = 0x88a1237 "Transaction::add",
    name = 0xb71ff1f8 "Transaction::syncIndexes"},
  syncObject = {<SynchronizationObject> = {
      _vptr.SynchronizationObject = 0x889f458}, monitorCount = 0,
    mutex = {<SynchronizationObject> = {
        _vptr.SynchronizationObject = 0x88ab7b8}, holder = 0x0, mutex = {
        __data = {__lock = 0, __count = 0, __owner = 0, __kind = 0,
          __nusers = 0, {__spins = 0, __list = {__next = 0x0}}},
        __size = '\0' <repeats 23 times>, __align = 0}}, queue = 0x0,
    exclusiveThread = 0x0, readers = 0, waiters = 0, lockState = 0,
    stalls = 0, objectId = 141848, sharedCount = 0, collisionCount = 0,
    exclusiveCount = 2, waitCount = 0, queueLength = 0,
    where = 0x88a17aa "Transaction::initialize",
    name = 0xb71f8e30 "Transaction::syncObject"},
  syncSavepoints = {<SynchronizationObject> = {
      _vptr.SynchronizationObject = 0x889f458}, monitorCount = 0,
    mutex = {<SynchronizationObject> = {
        _vptr.SynchronizationObject = 0x88ab7b8}, holder = 0x0, mutex = {
        __data = {__lock = 0, __count = 0, __owner = 0, __kind = 0,
          __nusers = 0, {__spins = 0, __list = {__next = 0x0}}},
        __size = '\0' <repeats 23 times>, __align = 0}}, queue = 0x0,
    exclusiveThread = 0x0, readers = 0, waiters = 0, lockState = 0,
    stalls = 0, objectId = 141849, sharedCount = 0, collisionCount = 0,
    exclusiveCount = 0, waitCount = 0, queueLength = 0, where = 0x0,
    name = 0xb71ff230 "Transaction::syncSavepoints"}, totalRecordData = 0,
  totalRecords = 399, chilledRecords = 0, chilledBytes = 0, thawedRecords = 0,
  thawedBytes = 0, debugThawedRecords = 0, debugThawedBytes = 0,
  committedRecords = 0, deletedRecords = 0, chillPoint = 0xb71ff174,
  scanIndexCount = 2, numberStates = 8, state = 0, dependencies = 7,
  useCount = 15, inList = 1, firstRecord = 0xa9ad0738, lastRecord = 0xa9ad54c8}
[9 Jul 2008 19:38] Philip Stoev
Results from testing the patch from

http://lists.mysql.com/commits/49256

no patch, no -march=i486 = crash
no patch, -march=i486 = no crash
patch, -march=i486 = no crash
patch, no -march=i486 - does not compile

Vlad says:

Now my working theory is that without -march=i486, compiler backend would
not bother with cmpxchg semantics and that possibly  rearranged instructions
in such a way that is ZF flag was modified again which would in crash at
runtime.
I make it the case for Build-Team , I know maria is using exactly the same
inline assembly, so it is not only Falcon case.
The problem does not seem to appear on gcc4.1, interesting.
[9 Jul 2008 19:56] Vladislav Vaintroub
Build-team,
assigning to you. Basically, what we've found during  the test on philips
GCC 4.3.0 compiler on 32 bit is that if -march is not set (to i486 or later)
compare-exchange inline assembly appears to be broken - the assembly equivalent of __sync_bool_compare_and_swap does not always retuern correct value , using GCC atomic builtins results into link error. 
So could I make a request to compile with at least -march=i486 on 32 bit linux ?
or -march=i586/i686 if you like it better.
[11 Jul 2008 10:23] 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:

  http://lists.mysql.com/commits/49547

2731 Vladislav Vaintroub	2008-07-11
      Bug#37725 : assertion in transaction::waitForTransaction
      The patch fixes the problem where Transaction::waitingFor is not reset 
      if LOCK_TIMEOUT exception is thrown by Sync::timedout().
[11 Jul 2008 16:54] Kevin Lewis
Vlad,  Code looks good.  Nice catch (pun intended)
[22 Aug 2008 21:21] Kevin Lewis
This fix is in version 6.0.6
[1 Oct 2008 12:11] Jon Stephens
Documented in the 6.0.6 changelog as follows:

        Binaries built using gcc 4.3 could crash when running large numbers of
        DML statements on Falcon tables.