• unknown's avatar
    bug#2831 - --extenral-locking does not fully work with --myisam-recover. · a7919a11
    unknown authored
    Changed the semantics of open_count so that it is decremented
    at every unlock (if it was incremented due to data changes).
    So it indicates a crash, if it is non-zero after a lock.
    The table will then be repaired.
    
    
    myisam/mi_close.c:
      bug#2831 - --extenral-locking does not fully work with --myisam-recover.
      To avoid flushing the open_count at every unlock,
      we need to do so at close at least.
    myisam/mi_locking.c:
      bug#2831 - --extenral-locking does not fully work with --myisam-recover.
      open_count is now decremented at unlock (from a writelock) with
      mi_unlock_open_count(). After every new lock the state is read
      from the index file and the open_count checked. If not zero,
      another server must have crashed, so the table is marked as crashed.
      In certain situations the decremented open_count mut be flushed to
      the index file. I tried to keep these extra flushes as seldom as possible.
    sql/ha_myisam.cc:
      bug#2831 - --extenral-locking does not fully work with --myisam-recover.
      Added code to repair the table, if it is marked crashed after
      successful locking and the --myisam-recover option is set.
    sql/sql_table.cc:
      This does not really belong to the bugfix for #2831.
      But it was detected during fixing the external locking.
    a7919a11
sql_table.cc 65.5 KB