void FSyncLockThread::doRealWork() { SimpleMutex::scoped_lock lkf(filesLockedFsync); OperationContextImpl txn; // XXX? Lock::GlobalWrite global(txn.lockState()); // No WriteUnitOfWork needed SimpleMutex::scoped_lock lk(fsyncCmd.m); verify( ! fsyncCmd.locked ); // impossible to get here if locked is true try { getDur().syncDataAndTruncateJournal(&txn); } catch( std::exception& e ) { error() << "error doing syncDataAndTruncateJournal: " << e.what() << endl; fsyncCmd.err = e.what(); fsyncCmd._threadSync.notify_one(); fsyncCmd.locked = false; return; } global.downgrade(); try { StorageEngine* storageEngine = getGlobalEnvironment()->getGlobalStorageEngine(); storageEngine->flushAllFiles(true); } catch( std::exception& e ) { error() << "error doing flushAll: " << e.what() << endl; fsyncCmd.err = e.what(); fsyncCmd._threadSync.notify_one(); fsyncCmd.locked = false; return; } verify( ! fsyncCmd.locked ); fsyncCmd.locked = true; fsyncCmd._threadSync.notify_one(); while ( ! fsyncCmd.pendingUnlock ) { fsyncCmd._unlockSync.wait(fsyncCmd.m); } fsyncCmd.pendingUnlock = false; fsyncCmd.locked = false; fsyncCmd.err = "unlocked"; fsyncCmd._unlockSync.notify_one(); }
void FSyncLockThread::doRealWork() { SimpleMutex::scoped_lock lkf(filesLockedFsync); Lock::GlobalWrite global(true/*stopGreed*/); SimpleMutex::scoped_lock lk(fsyncCmd.m); verify( ! fsyncCmd.locked ); // impossible to get here if locked is true try { getDur().syncDataAndTruncateJournal(); } catch( std::exception& e ) { error() << "error doing syncDataAndTruncateJournal: " << e.what() << endl; fsyncCmd.err = e.what(); fsyncCmd._threadSync.notify_one(); fsyncCmd.locked = false; return; } global.downgrade(); try { MemoryMappedFile::flushAll(true); } catch( std::exception& e ) { error() << "error doing flushAll: " << e.what() << endl; fsyncCmd.err = e.what(); fsyncCmd._threadSync.notify_one(); fsyncCmd.locked = false; return; } verify( ! fsyncCmd.locked ); fsyncCmd.locked = true; fsyncCmd._threadSync.notify_one(); while ( ! fsyncCmd.pendingUnlock ) { fsyncCmd._unlockSync.wait(fsyncCmd.m); } fsyncCmd.pendingUnlock = false; fsyncCmd.locked = false; fsyncCmd.err = "unlocked"; fsyncCmd._unlockSync.notify_one(); }
int32_t main(int32_t argc, char **argv) { linearkalmanfilter::LinearKalmanFilter lkf(argc, argv); return lkf.runModule(); }