diff --git a/ftk/src/ftk.h b/ftk/src/ftk.h index a2e1518..0ca93c6 100644 --- a/ftk/src/ftk.h +++ b/ftk/src/ftk.h @@ -3926,6 +3926,7 @@ virtual RCODE FLMAPI resize( FLMUINT uiNumBytes, + FLMBOOL bPreallocate, FLMUINT * puiActualSize = NULL) = 0; virtual void FLMAPI incrementTotalBytesAllocated( @@ -3963,9 +3964,9 @@ FLMUINT * puiTotalBytesAllocated) = 0; virtual void * FLMAPI allocCell( - IF_Relocator * pRelocator = NULL, - void * pvInitialData = NULL, - FLMUINT uiDataSize = 0) = 0; + IF_Relocator * pRelocator, + void * pvInitialData, + FLMUINT uiDataSize) = 0; virtual void * FLMAPI allocCell( IF_Relocator * pRelocator, diff --git a/ftk/src/ftkmem.cpp b/ftk/src/ftkmem.cpp index fac9761..0847ed6 100644 --- a/ftk/src/ftkmem.cpp +++ b/ftk/src/ftkmem.cpp @@ -198,6 +198,7 @@ public: RCODE FLMAPI resize( FLMUINT uiNumBytes, + FLMBOOL bPreallocate, FLMUINT * puiActualSize = NULL); void FLMAPI incrementTotalBytesAllocated( @@ -2277,7 +2278,7 @@ RCODE FLMAPI F_SlabManager::setup( if( uiPreallocSize) { - if( RC_BAD( rc = resize( uiPreallocSize, NULL))) + if( RC_BAD( rc = resize( uiPreallocSize, TRUE, NULL))) { goto Exit; } @@ -2293,6 +2294,7 @@ Desc: ****************************************************************************/ RCODE FLMAPI F_SlabManager::resize( FLMUINT uiNumBytes, + FLMBOOL bPreallocate, FLMUINT * puiActualSize) { RCODE rc = NE_FLM_OK; @@ -2350,7 +2352,7 @@ RCODE FLMAPI F_SlabManager::resize( m_uiTotalBytesAllocated -= m_uiSlabSize; } } - else + else if( bPreallocate) { // Allocate the required number of slabs @@ -2392,8 +2394,15 @@ RCODE FLMAPI F_SlabManager::resize( { *puiActualSize = m_uiTotalSlabs * m_uiSlabSize; } - - m_uiPreallocSlabs = m_uiTotalSlabs; + + if( bPreallocate) + { + m_uiPreallocSlabs = m_uiTotalSlabs; + } + else + { + m_uiPreallocSlabs = 0; + } Exit: diff --git a/ftk/src/ftkunix.cpp b/ftk/src/ftkunix.cpp index cf72959..5d7c1fd 100644 --- a/ftk/src/ftkunix.cpp +++ b/ftk/src/ftkunix.cpp @@ -449,7 +449,7 @@ Exit: Desc: Truncate the file to the indicated size ******************************************************************************/ RCODE FLMAPI F_FileHdl::truncate( - FLMUINT64 uiNew64Size) + FLMUINT64 ui64NewSize) { RCODE rc = NE_FLM_OK; FLMUINT64 ui64CurrentSize; @@ -466,7 +466,7 @@ RCODE FLMAPI F_FileHdl::truncate( goto Exit; } - if( ftruncate( m_fd, ui64Size) == -1) + if( ftruncate( m_fd, ui64NewSize) == -1) { rc = f_mapPlatformError( errno, NE_FLM_TRUNCATING_FILE); goto Exit; @@ -675,7 +675,6 @@ RCODE F_FileHdl::lowLevelWrite( F_FileAsyncClient * pAsyncClient = NULL; FLMBOOL bWaitForWrite = FALSE; FLMBYTE * pucExtendBuffer = NULL; - FLMUINT uiTotalBytesToExtend; if( pIOBuffer && pvBuffer && pvBuffer != pIOBuffer->getBufferPtr()) { @@ -694,6 +693,9 @@ RCODE F_FileHdl::lowLevelWrite( if( m_bDoDirectIO && !m_numAsyncPending && m_uiExtendSize) { + FLMUINT64 ui64CurrFileSize; + FLMUINT uiTotalBytesToExtend; + if( RC_BAD( rc = getPreWriteExtendSize( ui64WriteOffset, uiBytesToWrite, &ui64CurrFileSize, &uiTotalBytesToExtend))) {