From c9c7da306cb590179ac810dbfd676255067b1bb6 Mon Sep 17 00:00:00 2001 From: ahodgkinson Date: Tue, 4 Apr 2006 15:24:18 +0000 Subject: [PATCH] Support for atomic ops on additional platforms. git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@278 0109f412-320b-0410-ab79-c3e0c5ffbbe6 --- xflaim/java/jni/jbackup.cpp | 8 +- xflaim/java/jni/jnirestore.h | 8 +- xflaim/java/jni/jnistatus.h | 12 +- xflaim/src/fcomfact.cpp | 8 +- xflaim/src/fcomfact.h | 4 +- xflaim/src/fdllmain.cpp | 15 +- xflaim/src/fdom.cpp | 30 +- xflaim/src/flaimsys.h | 197 ++++++----- xflaim/src/flblddb.cpp | 4 +- xflaim/src/flopen.cpp | 2 +- xflaim/src/flutil.cpp | 33 -- xflaim/src/fntable.cpp | 36 +- xflaim/src/fposix.cpp | 102 +----- xflaim/src/fsrvlock.cpp | 14 +- xflaim/src/fsrvlock.h | 6 +- xflaim/src/fsuperfl.cpp | 6 +- xflaim/src/fsuperfl.h | 25 +- xflaim/src/fsysdata.cpp | 20 +- xflaim/src/ftk.h | 648 +++++++++++++++++++++++++++++------ xflaim/src/ftkmisc.cpp | 83 ++--- xflaim/src/ftksem.cpp | 6 +- xflaim/src/ftksem.h | 81 +---- xflaim/src/ftkthrd.cpp | 43 +-- xflaim/src/ftkthrd.h | 8 +- xflaim/src/ncache.cpp | 2 +- xflaim/src/xflaim.h | 29 +- xflaim/util/fdomedt.cpp | 4 +- xflaim/util/fshell.cpp | 19 +- 28 files changed, 852 insertions(+), 601 deletions(-) diff --git a/xflaim/java/jni/jbackup.cpp b/xflaim/java/jni/jbackup.cpp index 199f96e..2269c93 100644 --- a/xflaim/java/jni/jbackup.cpp +++ b/xflaim/java/jni/jbackup.cpp @@ -55,12 +55,12 @@ public: return( IF_BackupClient::getRefCount()); } - virtual FINLINE FLMUINT32 XFLMAPI AddRef( void) + virtual FINLINE FLMINT XFLMAPI AddRef( void) { return( IF_BackupClient::AddRef()); } - virtual FINLINE FLMUINT32 XFLMAPI Release( void) + virtual FINLINE FLMINT XFLMAPI Release( void) { return( IF_BackupClient::Release()); } @@ -97,12 +97,12 @@ public: return( IF_BackupStatus::getRefCount()); } - virtual FINLINE FLMUINT32 XFLMAPI AddRef( void) + virtual FINLINE FLMINT XFLMAPI AddRef( void) { return( IF_BackupStatus::AddRef()); } - virtual FINLINE FLMUINT32 XFLMAPI Release( void) + virtual FINLINE FLMINT XFLMAPI Release( void) { return( IF_BackupStatus::Release()); } diff --git a/xflaim/java/jni/jnirestore.h b/xflaim/java/jni/jnirestore.h index c3258f3..310ac6d 100644 --- a/xflaim/java/jni/jnirestore.h +++ b/xflaim/java/jni/jnirestore.h @@ -62,12 +62,12 @@ public: return( IF_RestoreClient::getRefCount()); } - virtual FINLINE FLMUINT32 XFLMAPI AddRef( void) + virtual FINLINE FLMINT XFLMAPI AddRef( void) { return( IF_RestoreClient::AddRef()); } - virtual FINLINE FLMUINT32 XFLMAPI Release( void) + virtual FINLINE FLMINT XFLMAPI Release( void) { return( IF_RestoreClient::Release()); } @@ -262,12 +262,12 @@ public: return( IF_RestoreStatus::getRefCount()); } - virtual FINLINE FLMUINT32 XFLMAPI AddRef( void) + virtual FINLINE FLMINT XFLMAPI AddRef( void) { return( IF_RestoreStatus::AddRef()); } - virtual FINLINE FLMUINT32 XFLMAPI Release( void) + virtual FINLINE FLMINT XFLMAPI Release( void) { return( IF_RestoreStatus::Release()); } diff --git a/xflaim/java/jni/jnistatus.h b/xflaim/java/jni/jnistatus.h index d328109..671fb8a 100644 --- a/xflaim/java/jni/jnistatus.h +++ b/xflaim/java/jni/jnistatus.h @@ -53,12 +53,12 @@ public: return( IF_DbRenameStatus::getRefCount()); } - virtual FINLINE FLMUINT32 XFLMAPI AddRef( void) + virtual FINLINE FLMINT XFLMAPI AddRef( void) { return( IF_DbRenameStatus::AddRef()); } - virtual FINLINE FLMUINT32 XFLMAPI Release( void) + virtual FINLINE FLMINT XFLMAPI Release( void) { return( IF_DbRenameStatus::Release()); } @@ -98,12 +98,12 @@ public: return( IF_DbCopyStatus::getRefCount()); } - virtual FINLINE FLMUINT32 XFLMAPI AddRef( void) + virtual FINLINE FLMINT XFLMAPI AddRef( void) { return( IF_DbCopyStatus::AddRef()); } - virtual FINLINE FLMUINT32 XFLMAPI Release( void) + virtual FINLINE FLMINT XFLMAPI Release( void) { return( IF_DbCopyStatus::Release()); } @@ -143,12 +143,12 @@ public: return( IF_DbCheckStatus::getRefCount()); } - virtual FINLINE FLMUINT32 XFLMAPI AddRef( void) + virtual FINLINE FLMINT XFLMAPI AddRef( void) { return( IF_DbCheckStatus::AddRef()); } - virtual FINLINE FLMUINT32 XFLMAPI Release( void) + virtual FINLINE FLMINT XFLMAPI Release( void) { return( IF_DbCheckStatus::Release()); } diff --git a/xflaim/src/fcomfact.cpp b/xflaim/src/fcomfact.cpp index 24732c7..9cb3048 100644 --- a/xflaim/src/fcomfact.cpp +++ b/xflaim/src/fcomfact.cpp @@ -56,19 +56,19 @@ RCODE F_DbSystemFactory::QueryInterface( /******************************************************************** Desc: *********************************************************************/ -FLMUINT32 F_DbSystemFactory::AddRef(void) +FLMINT F_DbSystemFactory::AddRef(void) { LockModule(); - return 2; + return( 2); } /******************************************************************** Desc: *********************************************************************/ -FLMUINT32 F_DbSystemFactory::Release(void) +FLMINT F_DbSystemFactory::Release(void) { UnlockModule(); - return 1; + return( 1); } /******************************************************************** diff --git a/xflaim/src/fcomfact.h b/xflaim/src/fcomfact.h index 85be6af..e6bef74 100644 --- a/xflaim/src/fcomfact.h +++ b/xflaim/src/fcomfact.h @@ -44,9 +44,9 @@ RCODE XFLMAPI LockServer( bool bLock); - FLMUINT32 XFLMAPI AddRef( void); + FLMINT XFLMAPI AddRef( void); - FLMUINT32 XFLMAPI Release( void); + FLMINT XFLMAPI Release( void); }; #endif // FCOMFACT_H diff --git a/xflaim/src/fdllmain.cpp b/xflaim/src/fdllmain.cpp index dedb298..e2e7e75 100644 --- a/xflaim/src/fdllmain.cpp +++ b/xflaim/src/fdllmain.cpp @@ -27,7 +27,7 @@ #include "fcomfact.h" static F_DbSystem * gv_pDbSystem = NULL; -static FLMUINT32 gv_ui32LockCount = 0; +static FLMATOMIC gv_lockCount = 0; XFLMEXTC RCODE XFLMAPI DllCanUnloadNow( void); @@ -73,8 +73,7 @@ Desc: ******************************************************************************/ void LockModule(void) { - ftkAtomicIncrement( &gv_ui32LockCount); -// flmAssert( gv_ui32LockCount < 20); + flmAtomicInc( &gv_lockCount); } /****************************************************************************** @@ -82,7 +81,7 @@ Desc: ******************************************************************************/ void UnlockModule(void) { - ftkAtomicDecrement( &gv_ui32LockCount); + flmAtomicDec( &gv_lockCount); } /****************************************************************************** @@ -95,15 +94,15 @@ XFLMEXTC RCODE XFLMAPI DllCanUnloadNow( void) flmAssert( gv_pDbSystem); - if( gv_ui32LockCount > 1) + if( gv_lockCount > 1) { rc = RC_SET( NE_XFLM_FAILURE); } else { - // gv_ui32LockCount should be 1 because gv_pDbSystem is non-null. + // gv_lockCount should be 1 because gv_pDbSystem is non-null. - flmAssert( gv_ui32LockCount == 1); + flmAssert( gv_lockCount == 1); // Check for open databases @@ -194,7 +193,7 @@ XFLMEXTC RCODE XFLMAPI DllStop( void) { if( gv_pDbSystem) { - flmAssert( gv_ui32LockCount == 1); + flmAssert( gv_lockCount == 1); gv_pDbSystem->exit(); gv_pDbSystem->Release(); diff --git a/xflaim/src/fdom.cpp b/xflaim/src/fdom.cpp index 660a27b..3d3fab7 100644 --- a/xflaim/src/fdom.cpp +++ b/xflaim/src/fdom.cpp @@ -105,15 +105,16 @@ private: /***************************************************************************** Desc: ******************************************************************************/ -FLMUINT32 XFLMAPI F_BTreeIStream::Release( void) +FLMINT XFLMAPI F_BTreeIStream::Release( void) { - FLMUINT32 ui32RefCnt = --m_ui32RefCnt; - if (m_ui32RefCnt == 0) + FLMATOMIC refCnt = --m_refCnt; + + if (m_refCnt == 0) { close(); if( gv_XFlmSysData.pNodePool) { - m_ui32RefCnt = 1; + m_refCnt = 1; gv_XFlmSysData.pNodePool->insertBTreeIStream( this); return( 0); } @@ -122,7 +123,8 @@ FLMUINT32 XFLMAPI F_BTreeIStream::Release( void) delete this; } } - return ui32RefCnt; + + return( refCnt); } /***************************************************************************** @@ -200,15 +202,15 @@ Exit: /**************************************************************************** Desc: ****************************************************************************/ -FLMUINT32 XFLMAPI F_DOMNode::Release( void) +FLMINT XFLMAPI F_DOMNode::Release( void) { - FLMUINT32 ui32RefCnt = --m_ui32RefCnt; + FLMINT iRefCnt = --m_refCnt; - if (m_ui32RefCnt == 0) + if (iRefCnt == 0) { if( gv_XFlmSysData.pNodeCacheMgr) { - m_ui32RefCnt = 1; + m_refCnt = 1; gv_XFlmSysData.pNodeCacheMgr->insertDOMNode( this); return( 0); } @@ -218,7 +220,7 @@ FLMUINT32 XFLMAPI F_DOMNode::Release( void) } } - return ui32RefCnt; + return( iRefCnt); } /***************************************************************************** @@ -12411,7 +12413,7 @@ F_NodePool::~F_NodePool() while( (pTmpBTreeIStream = m_pFirstBTreeIStream) != NULL) { m_pFirstBTreeIStream = m_pFirstBTreeIStream->m_pNextInPool; - pTmpBTreeIStream->m_ui32RefCnt = 0; + pTmpBTreeIStream->m_refCnt = 0; pTmpBTreeIStream->m_pNextInPool = NULL; delete pTmpBTreeIStream; } @@ -12446,7 +12448,7 @@ void F_NodeCacheMgr::insertDOMNode( F_DOMNode * pNode) { - flmAssert( pNode->m_ui32RefCnt == 1); + flmAssert( pNode->m_refCnt == 1); f_mutexLock( gv_XFlmSysData.hNodeCacheMutex); pNode->resetDOMNode( TRUE); @@ -12499,7 +12501,7 @@ Desc: void F_NodePool::insertBTreeIStream( F_BTreeIStream * pBTreeIStream) { - flmAssert( pBTreeIStream->m_ui32RefCnt == 1); + flmAssert( pBTreeIStream->m_refCnt == 1); pBTreeIStream->reset(); f_mutexLock( m_hMutex); @@ -16086,7 +16088,7 @@ Exit: if( pAttr) { - flmAssert( pAttr->m_ui32RefCnt <= 2); + flmAssert( pAttr->m_refCnt <= 2); pAttr->Release(); } diff --git a/xflaim/src/flaimsys.h b/xflaim/src/flaimsys.h index 83a5b71..728ae71 100644 --- a/xflaim/src/flaimsys.h +++ b/xflaim/src/flaimsys.h @@ -419,33 +419,33 @@ public: RCODE setupNameTable( void); void clearTable( - FLMUINT uiPoolBlkSize); + FLMUINT uiPoolBlkSize); RCODE addReservedDictTags( void); RCODE getNextTagTypeAndNumOrder( - FLMUINT uiType, - FLMUINT * puiNextPos, - FLMUNICODE * puzTagName = NULL, - char * pszTagName = NULL, - FLMUINT uiNameBufSize = 0, - FLMUINT * puiTagNum = NULL, - FLMUINT * puiDataType = NULL, - FLMUNICODE * puzNamespace = NULL, - FLMUINT uiNamespaceBufSize = 0, - FLMBOOL bTruncatedNamesOk = TRUE); + FLMUINT uiType, + FLMUINT * puiNextPos, + FLMUNICODE * puzTagName = NULL, + char * pszTagName = NULL, + FLMUINT uiNameBufSize = 0, + FLMUINT * puiTagNum = NULL, + FLMUINT * puiDataType = NULL, + FLMUNICODE * puzNamespace = NULL, + FLMUINT uiNamespaceBufSize = 0, + FLMBOOL bTruncatedNamesOk = TRUE); RCODE getNextTagTypeAndNameOrder( - FLMUINT uiType, - FLMUINT * puiNextPos, - FLMUNICODE * puzTagName = NULL, - char * pszTagName = NULL, - FLMUINT uiNameBufSize = 0, - FLMUINT * puiTagNum = NULL, - FLMUINT * puiDataType = NULL, - FLMUNICODE * puzNamespace = NULL, - FLMUINT uiNamespaceBufSize = 0, - FLMBOOL bTruncatedNamesOk = TRUE); + FLMUINT uiType, + FLMUINT * puiNextPos, + FLMUNICODE * puzTagName = NULL, + char * pszTagName = NULL, + FLMUINT uiNameBufSize = 0, + FLMUINT * puiTagNum = NULL, + FLMUINT * puiDataType = NULL, + FLMUNICODE * puzNamespace = NULL, + FLMUINT uiNamespaceBufSize = 0, + FLMBOOL bTruncatedNamesOk = TRUE); RCODE getFromTagTypeAndName( F_Db * pDb, @@ -458,27 +458,27 @@ public: FLMUINT * puiDataType = NULL); RCODE getFromTagTypeAndNum( - F_Db * pDb, - FLMUINT uiType, - FLMUINT uiTagNum, - FLMUNICODE * puzTagName = NULL, - char * pszTagName = NULL, - FLMUINT * puiNameBufSize = NULL, - FLMUINT * puiDataType = NULL, - FLMUNICODE * puzNamespace = NULL, - char * pszNamespace = NULL, - FLMUINT * puiNamespaceBufSize = NULL, - FLMBOOL bTruncatedNamesOk = TRUE); + F_Db * pDb, + FLMUINT uiType, + FLMUINT uiTagNum, + FLMUNICODE * puzTagName = NULL, + char * pszTagName = NULL, + FLMUINT * puiNameBufSize = NULL, + FLMUINT * puiDataType = NULL, + FLMUNICODE * puzNamespace = NULL, + char * pszNamespace = NULL, + FLMUINT * puiNamespaceBufSize = NULL, + FLMBOOL bTruncatedNamesOk = TRUE); RCODE addTag( - FLMUINT uiType, - FLMUNICODE * puzTagName, - const char * pszTagName, - FLMUINT uiTagNum, - FLMUINT uiDataType = 0, - FLMUNICODE * puzNamespace = NULL, - FLMBOOL bCheckDuplicates = TRUE, - FLMBOOL bLimitNumToLoad = TRUE); + FLMUINT uiType, + FLMUNICODE * puzTagName, + const char * pszTagName, + FLMUINT uiTagNum, + FLMUINT uiDataType = 0, + FLMUNICODE * puzNamespace = NULL, + FLMBOOL bCheckDuplicates = TRUE, + FLMBOOL bLimitNumToLoad = TRUE); void sortTags( void); @@ -487,10 +487,10 @@ public: FLMUINT uiTagNum); RCODE cloneNameTable( - F_NameTable * pSrcNameTable); + F_NameTable * pSrcNameTable); RCODE importFromNameTable( - F_NameTable * pSrcNameTable); + F_NameTable * pSrcNameTable); FINLINE FLMBOOL haveAllElements( void) { @@ -502,38 +502,35 @@ public: return m_bLoadedAllAttributes; } - // Override the AddRef and Release provided in XF_RefCount. - // These need to be thread-safe. - - FLMUINT32 XFLMAPI AddRef( void); - - FLMUINT32 XFLMAPI Release( void); + FLMINT XFLMAPI AddRef( void); + FLMINT XFLMAPI Release( void); + private: RCODE allocTag( - FLMUINT uiType, - FLMUNICODE * puzTagName, - const char * pszTagName, - FLMUINT uiTagNum, - FLMUINT uiDataType, - FLMUNICODE * puzNamespace, - FLM_TAG_INFO ** ppTagInfo); + FLMUINT uiType, + FLMUNICODE * puzTagName, + const char * pszTagName, + FLMUINT uiTagNum, + FLMUINT uiDataType, + FLMUNICODE * puzNamespace, + FLM_TAG_INFO ** ppTagInfo); RCODE reallocSortTables( - FLMUINT uiNewTblSize); + FLMUINT uiNewTblSize); RCODE copyTagName( - FLMUNICODE * puzDestTagName, - char * pszDestTagName, - FLMUINT * puiDestBufSize, - FLMUNICODE * puzSrcTagName, - FLMBOOL bTruncatedNamesOk); + FLMUNICODE * puzDestTagName, + char * pszDestTagName, + FLMUINT * puiDestBufSize, + FLMUNICODE * puzSrcTagName, + FLMBOOL bTruncatedNamesOk); FLM_TAG_INFO * findTagByTypeAndNum( - FLMUINT uiType, - FLMUINT uiTagNum, - FLMUINT * puiInsertPos = NULL); + FLMUINT uiType, + FLMUINT uiTagNum, + FLMUINT * puiInsertPos = NULL); FLM_TAG_INFO * findTagByTypeAndName( FLMUINT uiType, @@ -545,33 +542,33 @@ private: FLMUINT * puiInsertPos = NULL); RCODE insertTagInTables( - FLM_TAG_INFO * pTagInfo, - FLMUINT uiTagTypeAndNameTblInsertPos, - FLMUINT uiTagTypeAndNumTblInsertPos); + FLM_TAG_INFO * pTagInfo, + FLMUINT uiTagTypeAndNameTblInsertPos, + FLMUINT uiTagTypeAndNumTblInsertPos); FLMUNICODE * findNamespace( - FLMUNICODE * puzNamespace, - FLMUINT * puiInsertPos); + FLMUNICODE * puzNamespace, + FLMUINT * puiInsertPos); RCODE insertNamespace( - FLMUNICODE * puzNamespace, - FLMUINT uiInsertPos); + FLMUNICODE * puzNamespace, + FLMUINT uiInsertPos); - F_Pool m_pool; - FLMUINT m_uiMemoryAllocated; - FLM_TAG_INFO ** m_ppSortedByTagTypeAndName; - FLM_TAG_INFO ** m_ppSortedByTagTypeAndNum; - FLMUINT m_uiTblSize; - FLMUINT m_uiNumTags; - FLMBOOL m_bTablesSorted; - FLMBOOL m_bLoadedAllElements; - FLMBOOL m_bLoadedAllAttributes; - FLMUINT m_uiNumElementsLoaded; - FLMUINT m_uiNumAttributesLoaded; - FLMUNICODE ** m_ppuzNamespaces; - FLMUINT m_uiNamespaceTblSize; - FLMUINT m_uiNumNamespaces; - F_MUTEX m_hRefMutex; + F_Pool m_pool; + FLMUINT m_uiMemoryAllocated; + FLM_TAG_INFO ** m_ppSortedByTagTypeAndName; + FLM_TAG_INFO ** m_ppSortedByTagTypeAndNum; + FLMUINT m_uiTblSize; + FLMUINT m_uiNumTags; + FLMBOOL m_bTablesSorted; + FLMBOOL m_bLoadedAllElements; + FLMBOOL m_bLoadedAllAttributes; + FLMUINT m_uiNumElementsLoaded; + FLMUINT m_uiNumAttributesLoaded; + FLMUNICODE ** m_ppuzNamespaces; + FLMUINT m_uiNamespaceTblSize; + FLMUINT m_uiNumNamespaces; + F_MUTEX m_hRefMutex; friend class F_Db; }; @@ -1531,12 +1528,12 @@ public: return( IF_BackupClient::getRefCount()); } - virtual FINLINE FLMUINT32 XFLMAPI AddRef( void) + virtual FINLINE FLMINT XFLMAPI AddRef( void) { return( IF_BackupClient::AddRef()); } - virtual FINLINE FLMUINT32 XFLMAPI Release( void) + virtual FINLINE FLMINT XFLMAPI Release( void) { return( IF_BackupClient::Release()); } @@ -1587,12 +1584,12 @@ public: return( IF_RestoreClient::getRefCount()); } - virtual FINLINE FLMUINT32 XFLMAPI AddRef( void) + virtual FINLINE FLMINT XFLMAPI AddRef( void) { return( IF_RestoreClient::AddRef()); } - virtual FINLINE FLMUINT32 XFLMAPI Release( void) + virtual FINLINE FLMINT XFLMAPI Release( void) { return( IF_RestoreClient::Release()); } @@ -1806,12 +1803,12 @@ public: return( IF_RestoreStatus::getRefCount()); } - virtual FINLINE FLMUINT32 XFLMAPI AddRef( void) + virtual FINLINE FLMINT XFLMAPI AddRef( void) { return( IF_RestoreStatus::AddRef()); } - virtual FINLINE FLMUINT32 XFLMAPI Release( void) + virtual FINLINE FLMINT XFLMAPI Release( void) { return( IF_RestoreStatus::Release()); } @@ -4047,12 +4044,12 @@ public: return( IF_ResultSetCompare::getRefCount()); } - virtual FINLINE FLMUINT32 XFLMAPI AddRef( void) + virtual FINLINE FLMINT XFLMAPI AddRef( void) { return( IF_ResultSetCompare::AddRef()); } - virtual FINLINE FLMUINT32 XFLMAPI Release( void) + virtual FINLINE FLMINT XFLMAPI Release( void) { return( IF_ResultSetCompare::Release()); } @@ -5000,7 +4997,7 @@ public: F_DbSystem() { - m_ui32RefCnt = 1; + m_refCnt = 1; LockModule(); } @@ -5009,9 +5006,9 @@ public: UnlockModule(); } - FLMUINT32 XFLMAPI AddRef( void); + FLMINT XFLMAPI AddRef( void); - FLMUINT32 XFLMAPI Release( void); + FLMINT XFLMAPI Release( void); RCODE XFLMAPI QueryInterface( RXFLMIID riid, @@ -5637,7 +5634,7 @@ private: static void checkNotUsedObjects( void); - static FLMUINT32 m_ui32FlmSysSpinLock; + static FLMATOMIC m_flmSysSpinLock; static FLMUINT m_uiFlmSysStartupCount; friend class F_Db; @@ -5991,7 +5988,7 @@ public: FLMUINT uiBytesToRead, FLMUINT * puiBytesRead); - FLMUINT32 XFLMAPI Release( void); + FLMINT XFLMAPI Release( void); FINLINE FLMUINT32 getBlkAddr( void) { @@ -6106,7 +6103,7 @@ public: } } - FLMUINT32 XFLMAPI Release( void); + FLMINT XFLMAPI Release( void); RCODE XFLMAPI createNode( IF_Db * pDb, diff --git a/xflaim/src/flblddb.cpp b/xflaim/src/flblddb.cpp index e3fe53c..c030b31 100644 --- a/xflaim/src/flblddb.cpp +++ b/xflaim/src/flblddb.cpp @@ -265,12 +265,12 @@ class F_NodeResultSetCompare : public IF_ResultSetCompare, public XF_Base return( NE_XFLM_OK); } - virtual FINLINE FLMUINT32 XFLMAPI AddRef( void) + virtual FINLINE FLMINT XFLMAPI AddRef( void) { return( IF_ResultSetCompare::AddRef()); } - virtual FINLINE FLMUINT32 XFLMAPI Release( void) + virtual FINLINE FLMINT XFLMAPI Release( void) { return( IF_ResultSetCompare::Release()); } diff --git a/xflaim/src/flopen.cpp b/xflaim/src/flopen.cpp index c72ce45..63eba44 100644 --- a/xflaim/src/flopen.cpp +++ b/xflaim/src/flopen.cpp @@ -1255,7 +1255,7 @@ F_Database::~F_Database() { FLMUINT uiRefCnt; - uiRefCnt = m_pFileIdList->Release(); + uiRefCnt = m_pFileIdList->Release( FALSE); flmAssert( !uiRefCnt); m_pFileIdList = NULL; } diff --git a/xflaim/src/flutil.cpp b/xflaim/src/flutil.cpp index cf932e1..4a3c42d 100644 --- a/xflaim/src/flutil.cpp +++ b/xflaim/src/flutil.cpp @@ -2591,39 +2591,6 @@ FLMINT f_uninativencmp( return( uiCount ? ((FLMINT)*puzStr1 - (FLMINT)*pszStr2) : 0); } -#if defined( FLM_MWERKS_NLM) - -/**************************************************************************** -Desc: Atomic increment... returns incremented value -****************************************************************************/ -FLMUINT32 ftkAtomicIncrement( - FLMUINT32 * puiTarget) -{ - __asm - { - mov eax, 1 - mov ecx, puiTarget - lock xadd [ecx], eax - inc eax - } -} - -/**************************************************************************** -Desc: Atomic decrement... returns decremented value -****************************************************************************/ -FLMUINT32 ftkAtomicDecrement( - FLMUINT32 * puiTarget) -{ - __asm - { - mov eax, 0ffffffffh - mov ecx, puiTarget - lock xadd [ecx], eax - dec eax - } -} -#endif - /*************************************************************************** Desc: Sort an array of items ****************************************************************************/ diff --git a/xflaim/src/fntable.cpp b/xflaim/src/fntable.cpp index 39c2834..4b01231 100644 --- a/xflaim/src/fntable.cpp +++ b/xflaim/src/fntable.cpp @@ -168,6 +168,7 @@ F_NameTable::F_NameTable() m_ppuzNamespaces = NULL; m_uiNamespaceTblSize = 0; m_uiNumNamespaces = 0; + m_hRefMutex = F_MUTEX_NULL; } /**************************************************************************** @@ -176,6 +177,11 @@ Desc: Destructor F_NameTable::~F_NameTable() { clearTable( 0); + + if( m_hRefMutex) + { + f_mutexDestroy( &m_hRefMutex); + } } /**************************************************************************** @@ -184,7 +190,20 @@ Desc: Setup name table. This routine should be called immediately after ****************************************************************************/ RCODE F_NameTable::setupNameTable( void) { +#ifndef FLM_HAVE_ATOMICS + RCODE rc = NE_XFLM_OK; + + if( RC_BAD( rc = f_mutexCreate( &m_hRefMutex))) + { + goto Exit; + } + +Exit: + + return( rc); +#else return( NE_XFLM_OK); +#endif } /**************************************************************************** @@ -2391,24 +2410,24 @@ Exit: /**************************************************************************** Desc: Increment use count on this object. ****************************************************************************/ -FLMUINT32 XFLMAPI F_NameTable::AddRef( void) +FLMINT XFLMAPI F_NameTable::AddRef( void) { - return( (FLMUINT32)(ftkAtomicIncrement( &m_ui32RefCnt))); + return( flmAtomicInc( &m_refCnt, m_hRefMutex, FALSE)); } /**************************************************************************** Desc: Decrement the use count and delete if use count goes to zero. ****************************************************************************/ -FLMUINT32 XFLMAPI F_NameTable::Release( void) +FLMINT XFLMAPI F_NameTable::Release( void) { - FLMUINT32 ui32RefCnt; + FLMINT iRefCnt; - if ((ui32RefCnt = (FLMUINT32)ftkAtomicDecrement( &m_ui32RefCnt)) == 0) + if ((iRefCnt = flmAtomicDec( &m_refCnt, m_hRefMutex, FALSE)) == 0) { delete this; } - return( ui32RefCnt); + return( iRefCnt); } /**************************************************************************** @@ -2419,8 +2438,7 @@ Desc: Get the name table for an FDB, if any. If it has no current is done with it. ****************************************************************************/ RCODE F_Db::getNameTable( - F_NameTable ** ppNameTable - ) + F_NameTable ** ppNameTable) { RCODE rc = NE_XFLM_OK; FLMBOOL bMutexLocked = FALSE; @@ -2433,6 +2451,7 @@ RCODE F_Db::getNameTable( rc = RC_SET_AND_ASSERT( NE_XFLM_NO_NAME_TABLE); goto Exit; } + (*ppNameTable)->AddRef(); } else @@ -2447,6 +2466,7 @@ RCODE F_Db::getNameTable( rc = RC_SET_AND_ASSERT( NE_XFLM_NO_NAME_TABLE); goto Exit; } + (*ppNameTable)->AddRef(); } else diff --git a/xflaim/src/fposix.cpp b/xflaim/src/fposix.cpp index 0996a66..350c709 100644 --- a/xflaim/src/fposix.cpp +++ b/xflaim/src/fposix.cpp @@ -1568,107 +1568,9 @@ FLMUINT flmGetFSBlockSize( return( uiFSBlkSize); } -/**************************************************************************** -Desc: -****************************************************************************/ -#if defined(__GNUC__) && defined(__i386__) -__attribute__((always_inline)) -static FINLINE unsigned int atomic_inc(volatile unsigned int * p) -{ - unsigned int rv; - - __asm__ __volatile__( - "movl $1, %%eax\n\t" - "lock\n\t" - "xaddl %%eax, (%%ecx)\n\t" - "incl %%eax" - : "=a" (rv) - : "c" (p) - ); - - return rv; -} -#endif +#endif // FLM_UNIX -/**************************************************************************** -Desc: -****************************************************************************/ -#if defined(__GNUC__) && defined(__i386__) -FLMUINT32 ftkAtomicIncrement( - FLMUINT32 * pui32Target) -{ - return( atomic_inc( pui32Target)); -} -#endif - -/**************************************************************************** -Desc: -****************************************************************************/ -#if defined(__GNUC__) && defined(__i386__) -__attribute__((always_inline)) -static FINLINE unsigned int atomic_dec(volatile unsigned int * p) -{ - unsigned int rv; - - __asm__ __volatile__( - "movl $-1, %%eax\n\t" - "lock\n\t" - "xaddl %%eax, (%%ecx)\n\t" - "decl %%eax" - : "=a" (rv) - : "c" (p) - ); // result left in eax - - return rv; -} -#endif - -/**************************************************************************** -Desc: -****************************************************************************/ -#if defined(__GNUC__) && defined(__i386__) -FLMUINT32 ftkAtomicDecrement( - FLMUINT32 * pui32Target) -{ - return( atomic_dec( pui32Target)); -} -#endif - -/**************************************************************************** -Desc: -****************************************************************************/ -#if defined(__GNUC__) && defined(__i386__) -__attribute__((always_inline)) -static FINLINE unsigned int atomic_xchg( - volatile unsigned int * p, - unsigned int i) -{ - unsigned int rv; - - __asm__ __volatile__( - "xchgl %%eax, (%%ecx)" - : "=a" (rv) - : "c" (p), "a" (i) - ); // result left in eax, no buslock required for xchgl - - return rv; -} -#endif - -/**************************************************************************** -Desc: -****************************************************************************/ -#if defined(__GNUC__) && defined(__i386__) -FLMUINT32 ftkAtomicExchange( - FLMUINT32 * puiTarget, - FLMUINT32 ui32Value) -{ - return( atomic_xchg( puiTarget, ui32Value)); -} -#endif - - -#elif defined( FLM_WATCOM_NLM) +#if defined( FLM_WATCOM_NLM) int fposixDummy(void) { return( 0); diff --git a/xflaim/src/fsrvlock.cpp b/xflaim/src/fsrvlock.cpp index d814a12..d7ba0fd 100644 --- a/xflaim/src/fsrvlock.cpp +++ b/xflaim/src/fsrvlock.cpp @@ -579,12 +579,12 @@ ServerLockObject::ServerLockObject() /**************************************************************************** Desc: ****************************************************************************/ -FLMUINT ServerLockObject::Release( +FLMINT ServerLockObject::Release( FLMBOOL bMutexAlreadyLocked) { - FLMUINT uiRefCnt = --m_ui32RefCnt; + FLMINT iRefCnt = --m_refCnt; - if( !uiRefCnt) + if( !iRefCnt) { delete this; goto Exit; @@ -593,7 +593,7 @@ FLMUINT ServerLockObject::Release( // When it is no longer pointed to from anything but the server lock // manager, put it into the avail list. - if (uiRefCnt == 1) + if (iRefCnt == 1) { LOCK_WAITER * pLockWaiter; @@ -622,7 +622,7 @@ FLMUINT ServerLockObject::Release( Exit: - return( uiRefCnt); + return( iRefCnt); } /**************************************************************************** @@ -1050,8 +1050,8 @@ RCODE ServerLockObject::Unlock( // At this point we should still have our reference to the object, // the lock manager's reference, and a reference from at least one // waiter (that may have been granted above). - flmAssert( m_ui32RefCnt >= 3); - m_ui32RefCnt--; + flmAssert( m_refCnt >= 3); + m_refCnt--; } m_pServerLockMgr->unlockMutex( FALSE); diff --git a/xflaim/src/fsrvlock.h b/xflaim/src/fsrvlock.h index 3fbae49..d47a7eb 100644 --- a/xflaim/src/fsrvlock.h +++ b/xflaim/src/fsrvlock.h @@ -351,14 +351,14 @@ public: FLMBOOL bRelease = FALSE, // Release object if no one is waiting XFLM_DB_STATS * pDbStats = NULL); // Place to gather DB stats. - FLMUINT Release( + FLMINT Release( FLMBOOL bMutexAlreadyLocked); // Decrement ref count, when it gets // down to 1, put it in the avail list. - FLMUINT32 XFLMAPI Release( void) + FLMINT XFLMAPI Release( void) { - return( (FLMUINT32)Release( FALSE)); + return( Release( FALSE)); } void RemoveWaiter( diff --git a/xflaim/src/fsuperfl.cpp b/xflaim/src/fsuperfl.cpp index 0f65c9a..98d6882 100644 --- a/xflaim/src/fsuperfl.cpp +++ b/xflaim/src/fsuperfl.cpp @@ -172,7 +172,7 @@ F_SuperFileHdl::~F_SuperFileHdl() if( m_pFileIdList) { - m_pFileIdList->Release(); + m_pFileIdList->Release( FALSE); } if (m_pszDbFileName) @@ -215,7 +215,7 @@ RCODE F_SuperFileHdl::Setup( { FLMUINT uiRefCnt; - uiRefCnt = m_pFileIdList->Release(); + uiRefCnt = m_pFileIdList->Release( FALSE); flmAssert( !uiRefCnt); m_pFileIdList = NULL; goto Exit; @@ -223,7 +223,7 @@ RCODE F_SuperFileHdl::Setup( } else { - pFileIdList->AddRef(); + pFileIdList->AddRef( FALSE); m_pFileIdList = pFileIdList; } diff --git a/xflaim/src/fsuperfl.h b/xflaim/src/fsuperfl.h index 10b8182..22b40db 100644 --- a/xflaim/src/fsuperfl.h +++ b/xflaim/src/fsuperfl.h @@ -88,24 +88,37 @@ public: FLMUINT uiFileNumber, FLMUINT * puiFileId); - FINLINE FLMUINT32 XFLMAPI AddRef( void) + FINLINE FLMINT XFLMAPI AddRef( + FLMBOOL bMutexLocked) { - return( ftkAtomicIncrement( &m_ui32RefCnt)); + return( flmAtomicInc( &m_refCnt, m_hMutex, bMutexLocked)); } - FINLINE FLMUINT32 XFLMAPI Release( void) + FINLINE FLMINT XFLMAPI Release( + FLMBOOL bMutexLocked) { - FLMUINT32 ui32RefCnt = ftkAtomicDecrement( &m_ui32RefCnt); + FLMINT iRefCnt = flmAtomicDec( &m_refCnt, m_hMutex, bMutexLocked); - if( !ui32RefCnt) + if( !iRefCnt) { delete this; } - return( ui32RefCnt); + + return( iRefCnt); } private: + FINLINE FLMINT XFLMAPI AddRef( void) + { + return( AddRef( FALSE)); + } + + FINLINE FLMINT XFLMAPI Release( void) + { + return( Release( FALSE)); + } + F_MUTEX m_hMutex; FLMUINT m_uiFileIdTblSize; FLMUINT * m_puiFileIdTbl; diff --git a/xflaim/src/fsysdata.cpp b/xflaim/src/fsysdata.cpp index 87f982f..1e1a95c 100644 --- a/xflaim/src/fsysdata.cpp +++ b/xflaim/src/fsysdata.cpp @@ -50,7 +50,7 @@ #define FLM_MAX_CACHE_SIZE (~((FLMUINT)0)) #endif -FLMUINT32 F_DbSystem::m_ui32FlmSysSpinLock = 0; +FLMATOMIC F_DbSystem::m_flmSysSpinLock = 0; FLMUINT F_DbSystem::m_uiFlmSysStartupCount = 0; static FLMBYTE ucSENPrefixArray[] = @@ -2194,7 +2194,7 @@ void F_DbSystem::lockSysData( void) { // Obtain the spin lock - while( ftkAtomicExchange( &m_ui32FlmSysSpinLock, 1) == 1) + while( flmAtomicExchange( &m_flmSysSpinLock, 1) == 1) { f_sleep( 10); } @@ -2206,7 +2206,7 @@ Desc: Unlock the system data structure for access - called only by startup ***************************************************************************/ void F_DbSystem::unlockSysData( void) { - (void)ftkAtomicExchange( &m_ui32FlmSysSpinLock, 0); + (void)flmAtomicExchange( &m_flmSysSpinLock, 0); } /**************************************************************************** @@ -4342,9 +4342,9 @@ RCODE XFLMAPI F_DbSystem::QueryInterface( /**************************************************************************** Desc: Increment the database system use count ****************************************************************************/ -FLMUINT32 XFLMAPI F_DbSystem::AddRef(void) +FLMINT XFLMAPI F_DbSystem::AddRef(void) { - FLMUINT32 ui32RefCnt = ftkAtomicIncrement( &m_ui32RefCnt); + FLMINT iRefCnt = flmAtomicInc( &m_refCnt); // Note: We don't bother with a call to LockModule() here because // it's done in the constructor. In fact, it's unlikely that @@ -4352,22 +4352,22 @@ FLMUINT32 XFLMAPI F_DbSystem::AddRef(void) // already sets the ref count to 1 and it's unlikely that there // will be to references to the same DbSystem object... - return ui32RefCnt; + return( iRefCnt); } /**************************************************************************** Desc: Decrement the database system use count ****************************************************************************/ -FLMUINT32 XFLMAPI F_DbSystem::Release(void) +FLMINT XFLMAPI F_DbSystem::Release(void) { - FLMUINT32 ui32RefCnt = ftkAtomicDecrement( &m_ui32RefCnt); + FLMINT iRefCnt = flmAtomicDec( &m_refCnt); - if (ui32RefCnt == 0) + if (iRefCnt == 0) { delete this; } - return ui32RefCnt; + return( iRefCnt); } /**************************************************************************** diff --git a/xflaim/src/ftk.h b/xflaim/src/ftk.h index a470b28..301b0fc 100644 --- a/xflaim/src/ftk.h +++ b/xflaim/src/ftk.h @@ -96,6 +96,33 @@ #define BYTE unsigned char #endif + #ifndef UINT + #define UINT unsigned int + #endif + + typedef void * MUTEX; + typedef void * SEMAPHORE; + typedef unsigned long ERROR; + + extern "C" + { + SEMAPHORE kSemaphoreAlloc(BYTE *pSemaName, UINT SemaCount); + ERROR kSemaphoreFree(SEMAPHORE SemaHandle); + ERROR kSemaphoreWait(SEMAPHORE SemaHandle); + ERROR kSemaphoreTimedWait(SEMAPHORE SemaHandle, UINT MilliSecondTimeOut); + ERROR kSemaphoreSignal(SEMAPHORE SemaHandle); + UINT kSemaphoreExamineCount(SEMAPHORE SemaHandle); + + MUTEX kMutexAlloc(BYTE *MutexName); + ERROR kMutexFree(MUTEX MutexHandle); + ERROR kMutexLock(MUTEX MutexHandle); + ERROR kMutexUnlock(MUTEX MutexHandle); + } + + typedef MUTEX F_MUTEX; + typedef MUTEX * F_MUTEX_p; + #define F_MUTEX_NULL 0 + // External Netware Symbols extern "C" @@ -200,6 +227,20 @@ #define f_va_arg va_arg #define f_va_end va_end + typedef struct + { + FLMATOMIC locked; + #ifdef FLM_DEBUG + FLMUINT uiThreadId; + FLMATOMIC lockedCount; + FLMATOMIC waitCount; + #endif + } F_INTERLOCK; + + typedef F_INTERLOCK * F_MUTEX; + typedef F_INTERLOCK ** F_MUTEX_p; + #define F_MUTEX_NULL NULL + #define f_stricmp( str1, str2) \ _stricmp((char *)(str1), (char *)(str2)) @@ -353,6 +394,12 @@ #define f_va_arg va_arg #define f_va_end va_end + #include + + typedef pthread_mutex_t * F_MUTEX; + typedef F_MUTEX * F_MUTEX_p; + #define F_MUTEX_NULL NULL + #endif /**************************************************************************** @@ -388,7 +435,7 @@ F_OSBase() { - m_ui32RefCnt = 1; + m_refCnt = 1; } virtual ~F_OSBase() @@ -397,7 +444,7 @@ FINLINE FLMUINT getRefCount( void) { - return( m_ui32RefCnt); + return( m_refCnt); } void * operator new( @@ -430,27 +477,26 @@ int); // line #endif - virtual FINLINE FLMUINT32 XFLMAPI AddRef( void) + virtual FINLINE FLMINT XFLMAPI AddRef( void) { - m_ui32RefCnt++; - return m_ui32RefCnt; + return( ++m_refCnt); } - virtual FINLINE FLMUINT32 XFLMAPI Release( void) + virtual FINLINE FLMINT XFLMAPI Release( void) { - FLMUINT32 ui32RefCnt = --m_ui32RefCnt; + FLMINT iRefCnt = --m_refCnt; - if( !ui32RefCnt) + if( !iRefCnt) { delete this; } - return( ui32RefCnt); + return( iRefCnt); } protected: - FLMUINT32 m_ui32RefCnt; + FLMATOMIC m_refCnt; }; /**************************************************************************** @@ -1378,97 +1424,499 @@ return( uiSeconds + f_timeGetLocalOffset()); } - /**************************************************************************** - Atomic Increment, Decrement, Exchange Functions - ****************************************************************************/ - - FLMUINT32 ftkAtomicIncrement( - FLMUINT32 * puiTarget); - - FLMUINT32 ftkAtomicDecrement( - FLMUINT32 * puiTarget); - - FLMUINT32 ftkAtomicExchange( - FLMUINT32 * puiTarget, - FLMUINT32 uiValue); - - #if defined( FLM_WIN) - - FINLINE FLMUINT32 ftkAtomicIncrement( - FLMUINT32 * puiTarget) - { - __asm - { - mov eax, 1 - mov ecx, puiTarget - lock xadd [ecx], eax - inc eax - } - } - - FINLINE FLMUINT32 ftkAtomicDecrement( - FLMUINT32 * puiTarget) - { - __asm - { - mov eax, 0ffffffffh - mov ecx, puiTarget - lock xadd [ecx], eax - dec eax - } - } - - FINLINE FLMUINT32 ftkAtomicExchange( - FLMUINT32 * puiTarget, - FLMUINT32 ui32Value) - { - __asm - { - mov eax, ui32Value - mov ecx, puiTarget - lock xchg eax, [ecx] - } - } - - #elif defined( FLM_NLM) - - extern "C" - { - LONG atomic_xchg( LONG *address, LONG value); - } - - #define ftkAtomicExchange( puiTarget, uiValue) \ - ((FLMUINT32)atomic_xchg( (LONG *)(puiTarget), (LONG)(uiValue))) - - #if defined( FLM_WATCOM_NLM) - - #pragma aux ftkAtomicIncrement parm [ecx]; - #pragma aux ftkAtomicIncrement = \ - 0xB8 0x01 0x00 0x00 0x00 /* mov eax, 1 */ \ - 0xF0 0x0F 0xC1 0x01 /* lock xadd [ecx], eax */ \ - 0x40 /* inc eax */ \ - parm [ecx] \ - modify exact [eax]; - - #pragma aux ftkAtomicDecrement parm [ecx]; - #pragma aux ftkAtomicDecrement = \ - 0xB8 0xFF 0xFF 0xFF 0xFF /* mov eax, 0ffffffffh */ \ - 0xF0 0x0F 0xC1 0x01 /* lock xadd [ecx], eax */ \ - 0x48 /* dec eax */ \ - parm [ecx] \ - modify exact [eax]; - - #endif - - #elif defined( FLM_UNIX) - - #if defined(__GNUC__) && defined(__i386__) - #define ATOMIC_INCDEC_SUPPORT 1 - #endif - - #else - #error Atomic operations are not available on the target platform + /********************************************************************** + Desc: Atomic Increment, Decrement, Exchange + Note: Some of this code is derived from the Ximian source code contained + in that Mono project's atomic.h file. + **********************************************************************/ + #ifndef FLM_HAVE_ATOMICS + #define FLM_HAVE_ATOMICS #endif + + /******************************************************************* + Desc: + *******************************************************************/ + #if defined( FLM_GNUC) && defined( __ia64__) + FINLINE FLMINT32 ia64_compare_and_swap( + volatile int * piTarget, + FLMINT32 i32NewVal, + FLMINT32 i32CompVal) + { + FLMINT32 i32Old; + + asm volatile ("mov ar.ccv = %2 ;;\n\t" + "cmpxchg4.acq %0 = [%1], %3, ar.ccv\n\t" + : "=r" (i32Old) : "r" (piTarget), + "r" (i32CompVal), + "r" (i32NewVal)); + + return( i32Old); + } + #endif + + /********************************************************************** + Desc: + **********************************************************************/ + #if defined( FLM_SPARC) && defined( FLM_SOLARIS) && !defined( FLM_GNUC) + extern "C" FLMINT32 sparc_atomic_add_32( + volatile FLMINT32 * piTarget, + FLMINT32 iDelta); + #endif + + /********************************************************************** + Desc: + **********************************************************************/ + #if defined( FLM_SPARC) && defined( FLM_SOLARIS) && !defined( FLM_GNUC) + extern "C" FLMINT32 sparc_atomic_xchg_32( + volatile FLMINT32 * piTarget, + FLMINT32 iNewValue); + #endif + + /********************************************************************** + Desc: + **********************************************************************/ + #if defined( FLM_AIX) + FINLINE int aix_atomic_add( + volatile int * piTarget, + int iDelta) + { + return( fetch_and_add( (int *)piTarget, iDelta) + iDelta); + } + #endif + + /********************************************************************** + Desc: + **********************************************************************/ + FINLINE FLMINT32 _flmAtomicInc( + FLMATOMIC * piTarget) + { + #if defined( FLM_NLM) + { + return( (FLMINT32)nlm_AtomicIncrement( (volatile LONG *)piTarget)); + } + #elif defined( FLM_WIN) + { + return( (FLMINT32)InterlockedIncrement( (volatile LONG *)piTarget)); + } + #elif defined( FLM_AIX) + { + return( (FLMINT32)aix_atomic_add( piTarget, 1)); + } + #elif defined( FLM_GNUC) + { + #if defined( __i386__) || defined( __x86_64__) + { + FLMINT32 i32Tmp; + + __asm__ __volatile__ ("lock; xaddl %0, %1" + : "=r" (i32Tmp), "=m" (*piTarget) + : "0" (1), "m" (*piTarget)); + + return( i32Tmp + 1); + } + #elif defined( __ppc__) || defined ( __powerpc__) + { + FLMINT32 i32Result = 0; + FLMINT32 i32Tmp; + + __asm__ __volatile__ ("\n1:\n\t" + "lwarx %0, 0, %2\n\t" + "addi %1, %0, 1\n\t" + "stwcx. %1, 0, %2\n\t" + "bne- 1b" + : "=&b" (i32Result), "=&b" (i32Tmp) + : "r" (piTarget) : "cc", "memory"); + + return( i32Result + 1); + } + #elif defined( __ia64__) + { + FLMINT32 i32Old; + + for( ;;) + { + i32Old = (FLMINT32)*piTarget; + + if( ia64_compare_and_swap( piTarget, + i32Old + 1, i32Old) == i32Old) + { + break; + } + } + + return( i32Old + 1); + } + #elif defined( __s390__) + { + FLMINT32 i32Tmp; + + __asm__ __volatile__ ("\tLA\t2,%1\n" + "0:\tL\t%0,%1\n" + "\tLR\t1,%0\n" + "\tAHI\t1,1\n" + "\tCS\t%0,1,0(2)\n" + "\tJNZ\t0b\n" + "\tLR\t%0,1" + : "=r" (i32Tmp), "+m" (*piTarget) + : : "1", "2", "cc"); + + return( i32Tmp); + } + #else + #ifdef FLM_HAVE_ATOMICS + #undef FLM_HAVE_ATOMICS + #endif + + F_UNREFERENCED_PARM( piTarget); + + flmAssert( 0); + return( 0); + #endif + } + #elif defined( FLM_SOLARIS) && defined( FLM_SPARC) + return( sparc_atomic_add_32( piTarget, 1)); + #else + #ifdef FLM_HAVE_ATOMICS + #undef FLM_HAVE_ATOMICS + #endif + + F_UNREFERENCED_PARM( piTarget); + + flmAssert( 0); + return( 0); + #endif + } + + /********************************************************************** + Desc: + **********************************************************************/ + FINLINE FLMINT32 _flmAtomicDec( + FLMATOMIC * piTarget) + { + #if defined( FLM_NLM) + { + return( (FLMINT32)nlm_AtomicDecrement( (volatile LONG *)piTarget)); + } + #elif defined( FLM_WIN) + { + return( (FLMINT32)InterlockedDecrement( (volatile LONG *)piTarget)); + } + #elif defined( FLM_AIX) + { + return( (FLMINT32)aix_atomic_add( piTarget, -1)); + } + #elif defined( FLM_GNUC) + { + #if defined( __i386__) || defined( __x86_64__) + { + FLMINT32 i32Tmp; + + __asm__ __volatile__ ("lock; xaddl %0, %1" + : "=r" (i32Tmp), "=m" (*piTarget) + : "0" (-1), "m" (*piTarget)); + + return( i32Tmp - 1); + } + #elif defined( __ppc__) || defined ( __powerpc__) + { + FLMINT32 i32Result = 0; + FLMINT32 i32Tmp; + + __asm__ __volatile__ ("\n1:\n\t" + "lwarx %0, 0, %2\n\t" + "addi %1, %0, -1\n\t" + "stwcx. %1, 0, %2\n\t" + "bne- 1b" + : "=&b" (i32Result), "=&b" (i32Tmp) + : "r" (piTarget) : "cc", "memory"); + + return( i32Result - 1); + } + #elif defined( __ia64__) + { + FLMINT32 i32Old; + + for( ;;) + { + i32Old = (FLMINT32)*piTarget; + + if( ia64_compare_and_swap( piTarget, i32Old - 1, + i32Old) == i32Old) + { + break; + } + } + + return( i32Old - 1); + } + #elif defined( __s390__) + { + FLMINT32 i32Tmp; + + __asm__ __volatile__ ("\tLA\t2,%1\n" + "0:\tL\t%0,%1\n" + "\tLR\t1,%0\n" + "\tAHI\t1,-1\n" + "\tCS\t%0,1,0(2)\n" + "\tJNZ\t0b\n" + "\tLR\t%0,1" + : "=r" (i32Tmp), "+m" (*piTarget) + : : "1", "2", "cc"); + + return( i32Tmp); + } + #else + #ifdef FLM_HAVE_ATOMICS + #undef FLM_HAVE_ATOMICS + #endif + + F_UNREFERENCED_PARM( piTarget); + + flmAssert( 0); + return( 0); + #endif + } + #elif defined( FLM_SOLARIS) && defined( FLM_SPARC) + return( sparc_atomic_add_32( piTarget, -1)); + #else + #ifdef FLM_HAVE_ATOMICS + #undef FLM_HAVE_ATOMICS + #endif + + F_UNREFERENCED_PARM( piTarget); + + flmAssert( 0); + return( 0); + #endif + } + + /********************************************************************** + Desc: + **********************************************************************/ + FINLINE FLMINT32 _flmAtomicExchange( + FLMATOMIC * piTarget, + FLMINT32 i32NewVal) + { + #if defined( FLM_NLM) + { + return( (FLMINT32)nlm_AtomicExchange( + (volatile LONG *)piTarget, i32NewVal)); + } + #elif defined( FLM_WIN) + { + return( (FLMINT32)InterlockedExchange( (volatile LONG *)piTarget, + i32NewVal)); + } + #elif defined( FLM_AIX) + { + int iOldVal; + + for( ;;) + { + iOldVal = (int)*piTarget; + + if( compare_and_swap( (int *)piTarget, &iOldVal, i32NewVal)) + { + break; + } + } + + return( (FLMINT32)iOldVal); + } + #elif defined( FLM_GNUC) + { + #if defined( __i386__) || defined( __x86_64__) + { + FLMINT32 i32Ret; + + __asm__ __volatile__ ("1:; lock; cmpxchgl %2, %0; jne 1b" + : "=m" (*piTarget), "=a" (i32Ret) + : "r" (i32NewVal), "m" (*piTarget), + "a" (*piTarget)); + + return( i32Ret); + } + #elif defined( __ppc__) || defined ( __powerpc__) + { + FLMINT32 i32Tmp = 0; + + __asm__ __volatile__ ("\n1:\n\t" + "lwarx %0, 0, %2\n\t" + "stwcx. %3, 0, %2\n\t" + "bne 1b" + : "=r" (i32Tmp) : "0" (i32Tmp), + "b" (piTarget), + "r" (i32NewVal) : "cc", "memory"); + + return( i32Tmp); + } + #elif defined( __ia64__) + { + FLMINT32 i32Result; + + for( ;;) + { + i32Result = (FLMINT32)*piTarget; + + if( ia64_compare_and_swap( piTarget, + i32NewVal, i32Result) == i32Result) + { + break; + } + } + + return( i32Result); + } + #elif defined( __s390__) + { + FLMINT32 i32Ret; + + __asm__ __volatile__ ("\tLA\t1,%0\n" + "0:\tL\t%1,%0\n" + "\tCS\t%1,%2,0(1)\n" + "\tJNZ\t0b" + : "+m" (*piTarget), "=r" (i32Ret) + : "r" (i32NewVal) + : "1", "cc"); + + return( i32Ret); + } + #else + #ifdef FLM_HAVE_ATOMICS + #undef FLM_HAVE_ATOMICS + #endif + + F_UNREFERENCED_PARM( piTarget); + F_UNREFERENCED_PARM( i32NewVal); + + flmAssert( 0); + return( 0); + #endif + } + #elif defined( FLM_SOLARIS) && defined( FLM_SPARC) + return( sparc_atomic_xchg_32( piTarget, i32NewVal)); + #else + #ifdef FLM_HAVE_ATOMICS + #undef FLM_HAVE_ATOMICS + #endif + + F_UNREFERENCED_PARM( piTarget); + F_UNREFERENCED_PARM( i32NewVal); + + flmAssert( 0); + return( 0); + #endif + } + + /********************************************************************** + Desc: + **********************************************************************/ + FINLINE FLMINT32 flmAtomicInc( + FLMATOMIC * piTarget, + F_MUTEX hMutex = F_MUTEX_NULL, + FLMBOOL bMutexAlreadyLocked = FALSE) + { + #ifdef FLM_HAVE_ATOMICS + F_UNREFERENCED_PARM( bMutexAlreadyLocked); + F_UNREFERENCED_PARM( hMutex); + + return( _flmAtomicInc( piTarget)); + #else + { + FLMINT32 i32NewVal; + + flmAssert( hMutex != F_MUTEX_NULL); + + if( !bMutexAlreadyLocked) + { + f_mutexLock( hMutex); + } + + i32NewVal = (FLMINT32)(++(*piTarget)); + + if( !bMutexAlreadyLocked) + { + f_mutexUnlock( hMutex); + } + + return( i32NewVal); + } + #endif + } + + /********************************************************************** + Desc: + **********************************************************************/ + FINLINE FLMINT32 flmAtomicDec( + FLMATOMIC * piTarget, + F_MUTEX hMutex = F_MUTEX_NULL, + FLMBOOL bMutexAlreadyLocked = FALSE) + { + #ifdef FLM_HAVE_ATOMICS + F_UNREFERENCED_PARM( bMutexAlreadyLocked); + F_UNREFERENCED_PARM( hMutex); + + return( _flmAtomicDec( piTarget)); + #else + { + FLMINT32 i32NewVal; + + flmAssert( hMutex != F_MUTEX_NULL); + + if( !bMutexAlreadyLocked) + { + f_mutexLock( hMutex); + } + + i32NewVal = (FLMINT32)(--(*piTarget)); + + if( !bMutexAlreadyLocked) + { + f_mutexUnlock( hMutex); + } + + return( i32NewVal); + } + #endif + } + + /********************************************************************** + Desc: + **********************************************************************/ + FINLINE FLMINT32 flmAtomicExchange( + FLMATOMIC * piTarget, + FLMINT32 i32NewVal, + F_MUTEX hMutex = F_MUTEX_NULL, + FLMBOOL bMutexAlreadyLocked = FALSE) + { + #ifdef FLM_HAVE_ATOMICS + F_UNREFERENCED_PARM( bMutexAlreadyLocked); + F_UNREFERENCED_PARM( hMutex); + + return( _flmAtomicExchange( piTarget, i32NewVal)); + #else + { + FLMINT32 i32OldVal; + + flmAssert( hMutex != F_MUTEX_NULL); + + if( !bMutexAlreadyLocked) + { + f_mutexLock( hMutex); + } + + i32OldVal = (FLMINT32)*piTarget; + *piTarget = i32NewVal; + + if( !bMutexAlreadyLocked) + { + f_mutexUnlock( hMutex); + } + + return( i32OldVal); + } + #endif + } /**************************************************************************** Pseudo Serial Numbers diff --git a/xflaim/src/ftkmisc.cpp b/xflaim/src/ftkmisc.cpp index 09b98c2..ed48654 100644 --- a/xflaim/src/ftkmisc.cpp +++ b/xflaim/src/ftkmisc.cpp @@ -32,10 +32,6 @@ F_MUTEX gv_hSerialMutex = F_MUTEX_NULL; #ifdef FLM_UNIX F_RandomGenerator gv_SerialRandom; - - #if !(defined( __i386__) && defined( __GNUC__)) - static pthread_mutex_t xflm_atomic_mutex = PTHREAD_MUTEX_INITIALIZER; - #endif #endif #ifdef FLM_NLM @@ -402,54 +398,41 @@ Exit: } /**************************************************************************** -Desc: +Desc: ****************************************************************************/ -#if defined( FLM_UNIX) && !(defined( __i386__) && defined( __GNUC__)) -FLMUINT32 ftkAtomicIncrement( - FLMUINT32 * puiTarget) +#if defined( FLM_SOLARIS) && defined( FLM_SPARC) && !defined( FLM_GNUC) +static void sparc_asm_code( void) { - FLMUINT32 ui32Ret; + asm( ".align 8"); + asm( ".global sparc_atomic_add_32"); + asm( ".type sparc_atomic_add_32, #function"); + asm( "sparc_atomic_add_32:"); + asm( " membar #LoadLoad | #LoadStore | #StoreStore | #StoreLoad"); + asm( " ld [%o0], %l0"); + asm( " add %l0, %o1, %l2"); + asm( " cas [%o0], %l0, %l2"); + asm( " cmp %l0, %l2"); + asm( " bne sparc_atomic_add_32"); + asm( " nop"); + asm( " add %l2, %o1, %o0"); + asm( " membar #LoadLoad | #LoadStore | #StoreStore | #StoreLoad"); + asm( "retl"); + asm( "nop"); - pthread_mutex_lock( &xflm_atomic_mutex); - ui32Ret = ++(*puiTarget); - pthread_mutex_unlock( &xflm_atomic_mutex); - - return( ui32Ret); -} -#endif - -/**************************************************************************** -Desc: -****************************************************************************/ -#if defined( FLM_UNIX) && !(defined( __i386__) && defined( __GNUC__)) -FLMUINT32 ftkAtomicDecrement( - FLMUINT32 * puiTarget) -{ - FLMUINT32 ui32Ret; - - pthread_mutex_lock( &xflm_atomic_mutex); - ui32Ret = --(*puiTarget); - pthread_mutex_unlock( &xflm_atomic_mutex); - - return( ui32Ret); -} -#endif - -/**************************************************************************** -Desc: -****************************************************************************/ -#if defined( FLM_UNIX) && !(defined( __i386__) && defined( __GNUC__)) -FLMUINT32 ftkAtomicExchange( - FLMUINT32 * puiTarget, - FLMUINT32 uiValue) -{ - FLMUINT32 ui32Ret; - - pthread_mutex_lock( &xflm_atomic_mutex); - ui32Ret = *puiTarget; - *puiTarget = uiValue; - pthread_mutex_unlock( &xflm_atomic_mutex); - - return( ui32Ret); + asm( ".align 8"); + asm( ".global sparc_atomic_xchg_32"); + asm( ".type sparc_atomic_xchg_32, #function"); + asm( "sparc_atomic_xchg_32:"); + asm( " membar #LoadLoad | #LoadStore | #StoreStore | #StoreLoad"); + asm( " ld [%o0], %l0"); + asm( " mov %o1, %l1"); + asm( " cas [%o0], %l0, %l1"); + asm( " cmp %l0, %l1"); + asm( " bne sparc_atomic_xchg_32"); + asm( " nop"); + asm( " mov %l0, %o0"); + asm( " membar #LoadLoad | #LoadStore | #StoreStore | #StoreLoad"); + asm( "retl"); + asm( "nop"); } #endif diff --git a/xflaim/src/ftksem.cpp b/xflaim/src/ftksem.cpp index 1c10be5..c165c69 100644 --- a/xflaim/src/ftksem.cpp +++ b/xflaim/src/ftksem.cpp @@ -40,11 +40,11 @@ RCODE f_mutexCreate( return( RC_SET( NE_XFLM_MEM)); } - (*phMutex)->ui32Locked = 0; + (*phMutex)->locked = 0; #ifdef FLM_DEBUG (*phMutex)->uiThreadId = 0; - (*phMutex)->ui32LockedCount = 0; - (*phMutex)->ui32WaitCount = 0; + (*phMutex)->lockedCount = 0; + (*phMutex)->waitCount = 0; #endif return( NE_XFLM_OK); diff --git a/xflaim/src/ftksem.h b/xflaim/src/ftksem.h index 938bd5c..75173b3 100644 --- a/xflaim/src/ftksem.h +++ b/xflaim/src/ftksem.h @@ -27,73 +27,6 @@ #ifndef FTKSEM_H #define FTKSEM_H -/***************************************************************************** - Mutexes -*****************************************************************************/ - -#if defined( FLM_WIN) - - typedef struct - { - FLMUINT32 ui32Locked; -#ifdef FLM_DEBUG - FLMUINT uiThreadId; - FLMUINT32 ui32LockedCount; - FLMUINT32 ui32WaitCount; -#endif - } F_INTERLOCK; - - typedef F_INTERLOCK * F_MUTEX; - typedef F_INTERLOCK ** F_MUTEX_p; - #define F_MUTEX_NULL NULL - -#elif defined( FLM_NLM) - - // WARNING! The following come from portable.h - - #ifndef UINT - #define UINT unsigned int - #endif - - // WARNING! The following come from mpkapis.h - - typedef void * MUTEX; - typedef void * SEMAPHORE; - typedef unsigned long ERROR; - -extern "C" -{ - SEMAPHORE kSemaphoreAlloc(BYTE *pSemaName, UINT SemaCount); - ERROR kSemaphoreFree(SEMAPHORE SemaHandle); - ERROR kSemaphoreWait(SEMAPHORE SemaHandle); - ERROR kSemaphoreTimedWait(SEMAPHORE SemaHandle, UINT MilliSecondTimeOut); - ERROR kSemaphoreSignal(SEMAPHORE SemaHandle); - UINT kSemaphoreExamineCount(SEMAPHORE SemaHandle); - - MUTEX kMutexAlloc(BYTE *MutexName); - ERROR kMutexFree(MUTEX MutexHandle); - ERROR kMutexLock(MUTEX MutexHandle); - ERROR kMutexUnlock(MUTEX MutexHandle); -} - - typedef MUTEX F_MUTEX; - typedef MUTEX * F_MUTEX_p; - #define F_MUTEX_NULL 0 - -#elif defined( FLM_UNIX) - - #include - - typedef pthread_mutex_t * F_MUTEX; - typedef F_MUTEX * F_MUTEX_p; - #define F_MUTEX_NULL NULL -#else - - #error Unsupported platform -#endif - -/* prototypes for the mutex functions **********************************/ - #ifndef FLM_NLM RCODE f_mutexCreate( F_MUTEX * phMutex); @@ -155,11 +88,11 @@ extern "C" FINLINE void f_mutexLock( F_MUTEX hMutex) { - while( ftkAtomicExchange( - &(((F_INTERLOCK *)hMutex)->ui32Locked), 1) != 0) + while( flmAtomicExchange( + &(((F_INTERLOCK *)hMutex)->locked), 1) != 0) { #ifdef FLM_DEBUG - ftkAtomicIncrement( &(((F_INTERLOCK *)hMutex)->ui32WaitCount)); + flmAtomicInc( &(((F_INTERLOCK *)hMutex)->waitCount)); #endif Sleep( 0); } @@ -167,26 +100,26 @@ extern "C" #ifdef FLM_DEBUG flmAssert( ((F_INTERLOCK *)hMutex)->uiThreadId == 0); ((F_INTERLOCK *)hMutex)->uiThreadId = _threadid; - ftkAtomicIncrement( &(((F_INTERLOCK *)hMutex)->ui32LockedCount)); + flmAtomicInc( &(((F_INTERLOCK *)hMutex)->lockedCount)); #endif } FINLINE void f_mutexUnlock( F_MUTEX hMutex) { - flmAssert( ((F_INTERLOCK *)hMutex)->ui32Locked == 1); + flmAssert( ((F_INTERLOCK *)hMutex)->locked == 1); #ifdef FLM_DEBUG flmAssert( ((F_INTERLOCK *)hMutex)->uiThreadId == _threadid); ((F_INTERLOCK *)hMutex)->uiThreadId = 0; #endif - ftkAtomicExchange( &(((F_INTERLOCK *)hMutex)->ui32Locked), 0); + flmAtomicExchange( &(((F_INTERLOCK *)hMutex)->locked), 0); } FINLINE void f_assertMutexLocked( F_MUTEX hMutex) { #ifdef FLM_DEBUG - flmAssert( ((F_INTERLOCK *)hMutex)->ui32Locked == 1); + flmAssert( ((F_INTERLOCK *)hMutex)->locked == 1); flmAssert( ((F_INTERLOCK *)hMutex)->uiThreadId == _threadid); #else F_UNREFERENCED_PARM( hMutex); diff --git a/xflaim/src/ftkthrd.cpp b/xflaim/src/ftkthrd.cpp index 6dd9dd3..4d93d81 100644 --- a/xflaim/src/ftkthrd.cpp +++ b/xflaim/src/ftkthrd.cpp @@ -43,53 +43,26 @@ /**************************************************************************** Desc: Add a Reference to this object. ****************************************************************************/ -FLMUINT32 F_Thread::AddRef( +FLMINT F_Thread::AddRef( FLMBOOL bMutexLocked) { - FLMUINT32 ui32RefCnt; - - if( !bMutexLocked) - { - f_mutexLock( m_hMutex); - } - - ui32RefCnt = ++m_ui32RefCnt; - - if( !bMutexLocked) - { - f_mutexUnlock( m_hMutex); - } - - return( ui32RefCnt); + return( flmAtomicInc( &m_refCnt, m_hMutex, bMutexLocked)); } /**************************************************************************** Desc: Removes a reference to this object. ****************************************************************************/ -FLMUINT32 F_Thread::Release( +FLMINT F_Thread::Release( FLMBOOL bMutexLocked) { - FLMUINT32 ui32RefCnt; - - if( !bMutexLocked && m_hMutex != F_MUTEX_NULL) - { - f_mutexLock( m_hMutex); - } - - flmAssert( m_ui32RefCnt > 0); - ui32RefCnt = --m_ui32RefCnt; - - if( !bMutexLocked && m_hMutex != F_MUTEX_NULL) - { - f_mutexUnlock( m_hMutex); - } - - if( !ui32RefCnt) + FLMINT iRefCnt = flmAtomicDec( &m_refCnt, m_hMutex, bMutexLocked); + + if( !iRefCnt) { delete this; } - return( ui32RefCnt); + return( iRefCnt); } /**************************************************************************** @@ -192,7 +165,7 @@ RCODE F_Thread::startThread( // Increment the reference count of the thread object now // that it is linked into the thread manager's list. - m_ui32RefCnt++; + m_refCnt++; // Start the thread diff --git a/xflaim/src/ftkthrd.h b/xflaim/src/ftkthrd.h index 2ad7e81..87ba5a0 100644 --- a/xflaim/src/ftkthrd.h +++ b/xflaim/src/ftkthrd.h @@ -220,20 +220,20 @@ public: // Reference counting methods. - FLMUINT32 AddRef( + FLMINT AddRef( FLMBOOL bMutexLocked); - FLMUINT32 Release( + FLMINT Release( FLMBOOL bMutexLocked); // Override the AddRef and Release from XF_RefCount - FINLINE FLMUINT32 XFLMAPI AddRef( void) + FINLINE FLMINT XFLMAPI AddRef( void) { return( AddRef( FALSE)); } - FINLINE FLMUINT32 XFLMAPI Release( void) + FINLINE FLMINT XFLMAPI Release( void) { return( Release( FALSE)); } diff --git a/xflaim/src/ncache.cpp b/xflaim/src/ncache.cpp index 49ee1ba..92da600 100644 --- a/xflaim/src/ncache.cpp +++ b/xflaim/src/ncache.cpp @@ -875,7 +875,7 @@ F_NodeCacheMgr::~F_NodeCacheMgr() while( (pTmp = m_pFirstNode) != NULL) { m_pFirstNode = m_pFirstNode->m_pNextInPool; - pTmp->m_ui32RefCnt = 0; + pTmp->m_refCnt = 0; pTmp->m_pNextInPool = NULL; pTmp->m_pCachedNode = NULL; delete pTmp; diff --git a/xflaim/src/xflaim.h b/xflaim/src/xflaim.h index bd098db..e786562 100644 --- a/xflaim/src/xflaim.h +++ b/xflaim/src/xflaim.h @@ -216,6 +216,12 @@ typedef FLMINT RCODE; typedef FLMINT FLMBOOL; + #if defined( FLM_WIN) || defined( FLM_NLM) + typedef volatile long FLMATOMIC; + #else + typedef volatile int FLMATOMIC; + #endif + #define F_FILENAME_SIZE 256 #define F_PATH_MAX_SIZE 256 @@ -322,9 +328,9 @@ RXFLMIID riid, void ** ppv) = 0; - virtual FLMUINT32 XFLMAPI AddRef( void) = 0; + virtual FLMINT XFLMAPI AddRef( void) = 0; - virtual FLMUINT32 XFLMAPI Release( void) = 0; + virtual FLMINT XFLMAPI Release( void) = 0; }; // XFLMIClassFactory @@ -1684,7 +1690,7 @@ XF_RefCount() { - m_ui32RefCnt = 1; + m_refCnt = 1; } virtual ~XF_RefCount() @@ -1693,30 +1699,29 @@ virtual FINLINE FLMUINT getRefCount( void) { - return( m_ui32RefCnt); + return( m_refCnt); } - virtual FINLINE FLMUINT32 XFLMAPI AddRef( void) + virtual FINLINE FLMINT XFLMAPI AddRef( void) { - m_ui32RefCnt++; - return m_ui32RefCnt; + return( ++m_refCnt); } - virtual FINLINE FLMUINT32 XFLMAPI Release( void) + virtual FINLINE FLMINT XFLMAPI Release( void) { - FLMUINT32 ui32RefCnt = --m_ui32RefCnt; + FLMINT iRefCnt = --m_refCnt; - if( !ui32RefCnt) + if( !iRefCnt) { delete this; } - return( ui32RefCnt); + return( iRefCnt); } protected: - FLMUINT32 m_ui32RefCnt; + FLMATOMIC m_refCnt; }; // Class ID for the F_DbSystemFactory class (which is defined in fcompub.h). diff --git a/xflaim/util/fdomedt.cpp b/xflaim/util/fdomedt.cpp index 6bdfc4d..e1ba779 100644 --- a/xflaim/util/fdomedt.cpp +++ b/xflaim/util/fdomedt.cpp @@ -629,12 +629,12 @@ public: return( IF_QueryStatus::getRefCount()); } - virtual FINLINE FLMUINT32 XFLMAPI AddRef( void) + virtual FINLINE FLMINT XFLMAPI AddRef( void) { return( IF_QueryStatus::AddRef()); } - virtual FINLINE FLMUINT32 XFLMAPI Release( void) + virtual FINLINE FLMINT XFLMAPI Release( void) { return( IF_QueryStatus::Release()); } diff --git a/xflaim/util/fshell.cpp b/xflaim/util/fshell.cpp index e0223a9..8ed28f7 100644 --- a/xflaim/util/fshell.cpp +++ b/xflaim/util/fshell.cpp @@ -310,7 +310,9 @@ FSTATIC void domDisplayInfo( char * errorToString( XMLParseError errorType); -// Local class definitions +/**************************************************************************** +Desc: +*****************************************************************************/ class F_LocalRestore : public F_FSRestore { public: @@ -347,6 +349,9 @@ private: }; +/**************************************************************************** +Desc: +*****************************************************************************/ class F_LocalRestoreStatus : public F_DefaultRestoreStatus { public: @@ -617,6 +622,9 @@ private: FLMUINT64 m_ui64RflBytesRead; }; +/**************************************************************************** +Desc: +*****************************************************************************/ class F_LocalBackupClient : public F_DefaultBackupClient { public: @@ -632,6 +640,9 @@ private: FlmShell * m_pShell; }; +/**************************************************************************** +Desc: +*****************************************************************************/ class F_LocalBackupStatus : public IF_BackupStatus, public XF_Base { public: @@ -651,12 +662,12 @@ public: return( IF_BackupStatus::getRefCount()); } - virtual FINLINE FLMUINT32 XFLMAPI AddRef( void) + virtual FINLINE FLMINT XFLMAPI AddRef( void) { return( IF_BackupStatus::AddRef()); } - virtual FINLINE FLMUINT32 XFLMAPI Release( void) + virtual FINLINE FLMINT XFLMAPI Release( void) { return( IF_BackupStatus::Release()); } @@ -666,8 +677,6 @@ private: FlmShell * m_pShell; }; -// Methods - /**************************************************************************** Desc: *****************************************************************************/