From 5c6a2219e6715bd7649c3fd28f58e6fb63d60a25 Mon Sep 17 00:00:00 2001 From: Antonin Kral Date: Wed, 30 Jun 2010 08:56:42 +0200 Subject: Imported Upstream version 1.4.4 --- db/database.h | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'db/database.h') diff --git a/db/database.h b/db/database.h index 868af0b..23bca7c 100644 --- a/db/database.h +++ b/db/database.h @@ -154,7 +154,7 @@ namespace mongo { return preallocateOnly ? 0 : p; } - MongoDataFile* addAFile( int sizeNeeded = 0, bool preallocateNextFile = false ) { + MongoDataFile* addAFile( int sizeNeeded, bool preallocateNextFile ) { int n = (int) files.size(); MongoDataFile *ret = getFile( n, sizeNeeded ); if ( preallocateNextFile ) @@ -168,12 +168,15 @@ namespace mongo { getFile( n, 0, true ); } - MongoDataFile* suitableFile( int sizeNeeded ) { + MongoDataFile* suitableFile( int sizeNeeded, bool preallocate ) { MongoDataFile* f = newestFile(); + if ( !f ) { + f = addAFile( sizeNeeded, preallocate ); + } for ( int i = 0; i < 8; i++ ) { if ( f->getHeader()->unusedLength >= sizeNeeded ) break; - f = addAFile( sizeNeeded ); + f = addAFile( sizeNeeded, preallocate ); if ( f->getHeader()->fileLength >= MongoDataFile::maxSize() ) // this is as big as they get so might as well stop break; } @@ -183,12 +186,16 @@ namespace mongo { Extent* allocExtent( const char *ns, int size, bool capped ) { Extent *e = DataFileMgr::allocFromFreeList( ns, size, capped ); if( e ) return e; - return suitableFile( size )->createExtent( ns, size, capped ); + return suitableFile( size, !capped )->createExtent( ns, size, capped ); } MongoDataFile* newestFile() { int n = (int) files.size(); - if ( n > 0 ) n--; + if ( n > 0 ) { + n--; + } else { + return 0; + } return getFile(n); } -- cgit v1.2.3