/** locking in read lock when called @see MongoMMF::close() */ static void groupCommit() { dbMutex.assertAtLeastReadLocked(); if( !commitJob.hasWritten() ) return; PREPLOGBUFFER(); WRITETOJOURNAL(commitJob._ab); // data is now in the journal, which is sufficient for acknowledging getlasterror. // (ok to crash after that) log() << "TEMP NOTIFYING COMMITTED" << endl; commitJob.notifyCommitted(); // write the noted write intent entries to the data files. // this has to come after writing to the journal, obviously... MongoFile::markAllWritable(); // for _DEBUG. normally we don't write in a read lock WRITETODATAFILES(); if (!dbMutex.isWriteLocked()) MongoFile::unmarkAllWritable(); commitJob.reset(); // REMAPPRIVATEVIEW // // remapping private views must occur after WRITETODATAFILES otherwise // we wouldn't see newly written data on reads. // DEV assert( !commitJob.hasWritten() ); if( !dbMutex.isWriteLocked() ) { // this needs done in a write lock thus we do it on the next acquisition of that // instead of here (there is no rush if you aren't writing anyway -- but it must happen, // if it is done, before any uncommitted writes occur). // dbMutex._remapPrivateViewRequested = true; } else { // however, if we are already write locked, we must do it now -- up the call tree someone // may do a write without a new lock acquisition. this can happen when MongoMMF::close() calls // this method when a file (and its views) is about to go away. // REMAPPRIVATEVIEW(); } }