From f5aa2e1a0d659579bebd1ad147191e7a83456ef7 Mon Sep 17 00:00:00 2001 From: ahodgkinson Date: Tue, 13 Jun 2006 21:13:24 +0000 Subject: [PATCH] Fixed various memory leaks and enabled memory tracking for debug builds. git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@571 0109f412-320b-0410-ab79-c3e0c5ffbbe6 --- flaim/src/fqcur.cpp | 18 ++++++++---------- flaim/src/scache.cpp | 8 ++++++-- flaim/util/dbshell.cpp | 7 ++++++- ftk/src/ftk.h | 3 +++ ftk/src/ftkdir.cpp | 2 +- ftk/src/ftkiobuf.cpp | 42 ++++++++++++++++++++++++------------------ ftk/src/ftkmem.cpp | 4 ++-- ftk/src/ftknlm.cpp | 4 ++-- ftk/src/ftksem.cpp | 4 ++-- ftk/src/ftksys.h | 12 +++++------- 10 files changed, 59 insertions(+), 45 deletions(-) diff --git a/flaim/src/fqcur.cpp b/flaim/src/fqcur.cpp index 5a8cf7e..1166134 100644 --- a/flaim/src/fqcur.cpp +++ b/flaim/src/fqcur.cpp @@ -645,18 +645,16 @@ FLMEXP RCODE FLMAPI FlmCursorFree( CURSOR * pCursor = (CURSOR *)*phCursor; IF_LogMessageClient * pLogMsg = NULL; - flmAssert( pCursor != NULL); + flmAssert( pCursor); - if( !gv_FlmSysData.pLogger) + if( gv_FlmSysData.pLogger) { - return( FERR_OK); - } - - if ((pLogMsg = gv_FlmSysData.pLogger->beginMessage( FLM_QUERY_MESSAGE, - F_DEBUG_MESSAGE)) != NULL) - { - flmLogQuery( pLogMsg, 0, pCursor); - f_endLogMessage( &pLogMsg); + if ((pLogMsg = gv_FlmSysData.pLogger->beginMessage( FLM_QUERY_MESSAGE, + F_DEBUG_MESSAGE)) != NULL) + { + flmLogQuery( pLogMsg, 0, pCursor); + f_endLogMessage( &pLogMsg); + } } if (!pCursor->pCSContext && gv_FlmSysData.uiMaxQueries) diff --git a/flaim/src/scache.cpp b/flaim/src/scache.cpp index e783e40..13e481c 100644 --- a/flaim/src/scache.cpp +++ b/flaim/src/scache.cpp @@ -6137,10 +6137,14 @@ RCODE ScaGetBlock( FFILE * pFile = pDb->pFile; FLMBOOL bGotFromDisk = FALSE; - flmAssert( uiBlkAddress != 0); - *ppSCacheRV = NULL; + if( !uiBlkAddress) + { + rc = RC_SET_AND_ASSERT( FERR_ILLEGAL_OP); + goto Exit; + } + // We should NEVER be attempting to read a block address that is // beyond the current logical end of file. diff --git a/flaim/util/dbshell.cpp b/flaim/util/dbshell.cpp index 6a23661..aca5ad9 100644 --- a/flaim/util/dbshell.cpp +++ b/flaim/util/dbshell.cpp @@ -3387,11 +3387,16 @@ FLMINT FlmFileSysCommand::execute( Exit: - if (pDir) + if( pDir) { pDir->Release(); } + if( pFileSystem) + { + pFileSystem->Release(); + } + if( RC_BAD( rc)) { pShell->con_printf( "\nError: %e\n", rc); diff --git a/ftk/src/ftk.h b/ftk/src/ftk.h index 86cdf46..f7476a5 100644 --- a/ftk/src/ftk.h +++ b/ftk/src/ftk.h @@ -1718,6 +1718,9 @@ virtual void FLMAPI notifyComplete( RCODE rc) = 0; + virtual void FLMAPI signalComplete( + RCODE rc) = 0; + virtual void FLMAPI setCompletionCallback( WRITE_COMPLETION_CB fnCompletion) = 0; diff --git a/ftk/src/ftkdir.cpp b/ftk/src/ftkdir.cpp index 01da334..1e2dedd 100644 --- a/ftk/src/ftkdir.cpp +++ b/ftk/src/ftkdir.cpp @@ -229,7 +229,7 @@ RCODE FLMAPI F_DirHdl::next( void) for( ;;) { - if ( m_bFirstTime ) + if( m_bFirstTime) { m_bFirstTime = FALSE; diff --git a/ftk/src/ftkiobuf.cpp b/ftk/src/ftkiobuf.cpp index 57a7398..c8f94c3 100644 --- a/ftk/src/ftkiobuf.cpp +++ b/ftk/src/ftkiobuf.cpp @@ -320,7 +320,7 @@ RCODE FLMAPI F_IOBufferMgr::getBuffer( linkToList( &m_pFirstUsed, pIOBuffer); #ifdef FLM_RING_ZERO_NLM - flmAssert( kSemaphoreExamineCount( (SEMAPHORE)(pIOBuffer->m_hSem)) == 0); + f_assert( kSemaphoreExamineCount( pIOBuffer->m_hSem) == 0); #endif Exit: @@ -359,7 +359,7 @@ F_IOBuffer::F_IOBuffer() m_aio.aio_fildes = -1; #endif #ifdef FLM_RING_ZERO_NLM - m_hSem = F_SEM_NULL; + m_hSem = NULL; #endif m_pStats = NULL; } @@ -385,9 +385,10 @@ F_IOBuffer::~F_IOBuffer() #endif #ifdef FLM_RING_ZERO_NLM - if (m_hSem != F_SEM_NULL) + if( m_hSem) { - f_semDestroy( &m_hSem); + (void)kSemaphoreFree( m_hSem); + m_hSem = NULL; } #endif @@ -438,8 +439,8 @@ FLMBOOL FLMAPI F_IOBuffer::isPending( void) Desc: ****************************************************************************/ RCODE FLMAPI F_IOBuffer::setupBuffer( - FLMUINT uiBufferSize, - FLMUINT uiBlockSize) + FLMUINT uiBufferSize, + FLMUINT uiBlockSize) { RCODE rc = NE_FLM_OK; @@ -453,8 +454,9 @@ RCODE FLMAPI F_IOBuffer::setupBuffer( #endif #ifdef FLM_RING_ZERO_NLM - if (RC_BAD( rc = f_semCreate( &m_hSem))) + if( (m_hSem = kSemaphoreAlloc( (BYTE *)"FTK_SEM", 0)) == NULL) { + rc = RC_SET( NE_FLM_MEM); goto Exit; } #endif @@ -494,6 +496,7 @@ RCODE FLMAPI F_IOBuffer::setupBuffer( m_uiBlockSize = uiBlockSize; Exit: + return( rc); } @@ -564,9 +567,9 @@ FLMBOOL F_IOBuffer::isIOComplete( void) #endif #ifdef FLM_RING_ZERO_NLM - if( (uiSemCount = (FLMUINT)kSemaphoreExamineCount( (SEMAPHORE)m_hSem)) != 0) + if( (uiSemCount = (FLMUINT)kSemaphoreExamineCount( m_hSem)) != 0) { - flmAssert( uiSemCount == 1); + f_assert( uiSemCount == 1); bComplete = TRUE; } #endif @@ -644,11 +647,12 @@ WriteComplete: #endif #ifdef FLM_RING_ZERO_NLM - if( kSemaphoreWait( (SEMAPHORE)m_hSem) != 0) + if( kSemaphoreWait( m_hSem) != 0) { - flmAssert( 0); + f_assert( 0); } - flmAssert( kSemaphoreExamineCount( (SEMAPHORE)m_hSem) == 0); + + f_assert( kSemaphoreExamineCount( m_hSem) == 0); rc = m_completionRc; notifyComplete( m_completionRc); #endif @@ -688,12 +692,14 @@ void * FLMAPI F_IOBuffer::getStats( void) /**************************************************************************** Desc: ****************************************************************************/ -#ifdef FLM_RING_ZERO_NLM -void F_IOBuffer::signalComplete( - RCODE rc) +void FLMAPI F_IOBuffer::signalComplete( + RCODE rc) { +#ifdef FLM_RING_ZERO_NLM m_completionRc = rc; - flmAssert( kSemaphoreExamineCount( (SEMAPHORE)m_hSem) == 0); - kSemaphoreSignal( (SEMAPHORE)m_hSem); -} + f_assert( kSemaphoreExamineCount( m_hSem) == 0); + kSemaphoreSignal( m_hSem); +#else + F_UNREFERENCED_PARM( rc); #endif +} diff --git a/ftk/src/ftkmem.cpp b/ftk/src/ftkmem.cpp index 67972f6..d34c3e1 100644 --- a/ftk/src/ftkmem.cpp +++ b/ftk/src/ftkmem.cpp @@ -130,12 +130,12 @@ static FLMBOOL gv_bMemTrackingInitialized = FALSE; static FLMUINT gv_uiInitThreadId = 0; static F_MUTEX gv_hMemTrackingMutex = F_MUTEX_NULL; static FLMUINT gv_uiMemTrackingPtrArraySize = 0; -static FLMBOOL gv_bTrackLeaks = FALSE; static FLMUINT gv_uiNumMemPtrs = 0; static void ** gv_ppvMemTrackingPtrs = NULL; static FLMUINT gv_uiNextMemPtrSlotToUse = 0; static FLMUINT gv_uiAllocCnt = 0; -static FLMBOOL gv_bStackWalk = FALSE; +static FLMBOOL gv_bTrackLeaks = TRUE; +static FLMBOOL gv_bStackWalk = TRUE; static FLMBOOL gv_bLogLeaks = FALSE; #endif diff --git a/ftk/src/ftknlm.cpp b/ftk/src/ftknlm.cpp index 21cb55f..f5c8d3c 100644 --- a/ftk/src/ftknlm.cpp +++ b/ftk/src/ftknlm.cpp @@ -3146,7 +3146,7 @@ FSTATIC void DirectIONoWaitCallBack( F_UNREFERENCED_PARM( unknownAlwaysZero); - pIOBuffer->notifyComplete( + pIOBuffer->signalComplete( (RCODE)(completionCode == DFSNormalCompletion ? NE_FLM_OK : DfsMapError( completionCode, NE_FLM_DIRECT_WRITING_FILE))); @@ -3166,7 +3166,7 @@ FSTATIC void nssDioCallback( F_UNREFERENCED_PARM( reserved); - pIOBuffer->notifyComplete( + pIOBuffer->signalComplete( (RCODE)(completionCode == zOK ? NE_FLM_OK : MapNSSError( completionCode, NE_FLM_DIRECT_WRITING_FILE))); diff --git a/ftk/src/ftksem.cpp b/ftk/src/ftksem.cpp index 64c6c2f..24534bb 100644 --- a/ftk/src/ftksem.cpp +++ b/ftk/src/ftksem.cpp @@ -272,7 +272,7 @@ Desc: RCODE FLMAPI f_mutexCreate( F_MUTEX * phMutex) { - if( (*phMutex = (F_MUTEX)kMutexAlloc( (BYTE *)"NOVDB")) == F_MUTEX_NULL) + if( (*phMutex = (F_MUTEX)kMutexAlloc( (BYTE *)"FTK_MUTEX")) == F_MUTEX_NULL) { return( RC_SET( NE_FLM_MEM)); } @@ -652,7 +652,7 @@ Desc: RCODE FLMAPI f_semCreate( F_SEM * phSem) { - if( (*phSem = (F_SEM)kSemaphoreAlloc( (BYTE *)"NOVDB", 0)) == F_SEM_NULL) + if( (*phSem = (F_SEM)kSemaphoreAlloc( (BYTE *)"FTK_SEM", 0)) == F_SEM_NULL) { return( RC_SET( NE_FLM_MEM)); } diff --git a/ftk/src/ftksys.h b/ftk/src/ftksys.h index d1d10b6..bd68370 100644 --- a/ftk/src/ftksys.h +++ b/ftk/src/ftksys.h @@ -351,6 +351,9 @@ void FLMAPI notifyComplete( RCODE rc); + + void FLMAPI signalComplete( + RCODE rc); FINLINE void FLMAPI setCompletionCallback( WRITE_COMPLETION_CB fnCompletion) @@ -414,11 +417,6 @@ } #endif -#ifdef FLM_NLM - void signalComplete( - RCODE rc); -#endif - private: // Only called by the buffer manager @@ -453,8 +451,8 @@ F_TMSTAMP m_StartTime; FLMUINT64 m_ui64ElapMilli; void * m_pStats; -#ifdef FLM_NLM - F_SEM m_hSem; +#ifdef FLM_RING_ZERO_NLM + SEMAPHORE m_hSem; #endif friend class F_IOBufferMgr;