Changeset 2304

Show
Ignore:
Timestamp:
03/09/10 12:32:09 (5 months ago)
Author:
gm78
Message:

The internal object registry used by the Geodata data sources is now thread safe.

Location:
FalconView/trunk/public/fvw_core/GeodataDataSources
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • FalconView/trunk/public/fvw_core/GeodataDataSources/InternalObjectRegistry.cpp

    r1498 r2304  
    2222 
    2323/*static*/ CInternalObjectRegistry CInternalObjectRegistry::s_instance; 
     24CRITICAL_SECTION CInternalObjectRegistry::m_objectMapCs; 
    2425 
    2526#ifdef _DEBUG 
     
    3233CInternalObjectRegistry::CInternalObjectRegistry() : NextHandle(0) 
    3334{ 
     35   ::InitializeCriticalSection(&m_objectMapCs); 
    3436} 
    3537 
    3638CInternalObjectRegistry::~CInternalObjectRegistry() 
    3739{ 
     40   ::DeleteCriticalSection(&m_objectMapCs); 
     41 
    3842   // called on FalconView close, purely for leak testing 
    3943 
     
    8690/*static*/ ULONG CInternalObjectRegistry::RegisterObject(void *object, const char* typeName) 
    8791{ 
     92   ASSERT(object != NULL); 
     93 
     94   ::EnterCriticalSection(&m_objectMapCs); 
     95 
    8896   s_instance.ObjectMap[s_instance.NextHandle] = object; 
    8997 
     
    96104   } 
    97105 
    98    return s_instance.NextHandle++; 
     106   const int ret = s_instance.NextHandle++; 
     107 
     108   ::LeaveCriticalSection(&m_objectMapCs); 
     109 
     110   return ret; 
    99111} 
    100112 
    101113/*static*/ void CInternalObjectRegistry::UnregisterObject(ULONG handle) 
    102114{ 
     115   ::EnterCriticalSection(&m_objectMapCs); 
     116 
    103117   s_instance.ObjectMap.erase(handle); 
    104118 
     
    108122      s_instance.ObjectTypesMap.erase(handle); 
    109123   } 
     124 
     125   ::LeaveCriticalSection(&m_objectMapCs); 
    110126} 
    111127 
  • FalconView/trunk/public/fvw_core/GeodataDataSources/InternalObjectRegistry.h

    r1498 r2304  
    3333 
    3434private: 
     35   static CRITICAL_SECTION m_objectMapCs; 
    3536   static CInternalObjectRegistry s_instance; 
    3637   static BOOL Debugging;