bool Database::openExistingFile( int n ) { assert(this); Lock::assertWriteLocked(name); { // must not yet be visible to others as we aren't in the db's write lock and // we will write to _files vector - thus this assert. bool loaded = dbHolder().__isLoaded(name, path); assert( !loaded ); } // additionally must be in the dbholder mutex (no assert for that yet) // todo: why here? that could be bad as we may be read locked only here namespaceIndex.init(); if ( n < 0 || n >= DiskLoc::MaxFiles ) { massert( 15924 , str::stream() << "getFile(): bad file number value " << n << " (corrupt db?): run repair", false); } { if( n < (int) _files.size() && _files[n] ) { dlog(2) << "openExistingFile " << n << " is already open" << endl; return true; } } { boost::filesystem::path fullName = fileName( n ); string fullNameString = fullName.string(); MongoDataFile *df = new MongoDataFile(n); try { if( !df->openExisting( fullNameString.c_str() ) ) { delete df; return false; } } catch ( AssertionException& ) { delete df; throw; } while ( n >= (int) _files.size() ) { _files.push_back(0); } _files[n] = df; } return true; }