- #include "StdAfx.h"
- #include "Lock.h"
- ILockable::ILockable()
- {
- #ifdef _DEBUG
- pFirstLockDebugData = NULL;
- pLastLockDebugData = NULL;
- #endif
- CriticalSectionInitialized = 0;
- activeLockCount = 0;
- }
- int ILockable::InitCritSection()
- {
- if (!CriticalSectionInitialized)
- {
- InitializeCriticalSectionAndSpinCount(&CriticalSection, 0x00000400);
- CriticalSectionInitialized = 1;
- }
- return 1;
- }
- void ILockable::FreeCriticalSection()
- {
- if (CriticalSectionInitialized)
- {
- DeleteCriticalSection(&CriticalSection);
- CriticalSectionInitialized = 0;
- }
- }
- #ifdef _DEBUG
- Lock::Lock(ILockable* it, char *_file , int _line)
- {
- It = it;
- if (!it->CriticalSectionInitialized)
- {
- return;
- }
- EnterCriticalSection(&(it->CriticalSection));
- file = CopyStr((const char *)_file);
- line = _line;
- pNextLockDebugData = NULL;
- pPrevLockDebugData = NULL;
- if(!it->pFirstLockDebugData)
- {
- // first object, initialize the list with this as the only element
- it->pFirstLockDebugData = this;
- it->pLastLockDebugData = this;
- }
- else
- {
- // add to the end of the list
- it->pLastLockDebugData->pNextLockDebugData = this;
- this->pPrevLockDebugData = it->pLastLockDebugData;
- it->pLastLockDebugData = this;
- }
- (it->activeLockCount)++;
- }
- #else
- Lock::Lock(ILockable* it)
- {
- It = it;
- if (!it->CriticalSectionInitialized)
- {
- return;
- }
- EnterCriticalSection(&(it->CriticalSection));
- (it->activeLockCount)++;
- }
- #endif
- Lock::~Lock(void)
- {
- #ifdef _DEBUG
- if (file != NULL)
- {
- delete[] file;
- file = NULL;
- }
- #endif
- if (!It->CriticalSectionInitialized)
- {
- return;
- }
- #ifdef _DEBUG
- if ((It->pFirstLockDebugData == this) && (It->pLastLockDebugData == this))
- {
- // only object in the list, so NULL out the list head and tail pointers
- It->pFirstLockDebugData = NULL;
- It->pLastLockDebugData = NULL;
- }
- else if (It->pFirstLockDebugData == this)
- {
- // first object in list, set the head to the next object in the list
- It->pFirstLockDebugData = this->pNextLockDebugData;
- It->pFirstLockDebugData->pPrevLockDebugData = NULL;
- }
- else if (It->pLastLockDebugData == this)
- {
- // last object, set the tail to the pervious object in the list
- It->pLastLockDebugData = this->pPrevLockDebugData;
- It->pLastLockDebugData->pNextLockDebugData = NULL;
- }
- else if ((this->pNextLockDebugData != NULL) && (this->pPrevLockDebugData != NULL))
- {
- // in the middle of the list, so link the pointers for the previous
- // and next objects.
- this->pPrevLockDebugData->pNextLockDebugData = this->pNextLockDebugData;
- this->pNextLockDebugData->pPrevLockDebugData = this->pPrevLockDebugData;
- }
- #endif
- (It->activeLockCount)--;
- LeaveCriticalSection(&(It->CriticalSection));
- }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 13946 | OmegaNemesis28 | Merging //guest/perforce_software/p4api.net/... to //guest/omeganemesis28/p4api.net/...... « |
10 years ago | |
//guest/perforce_software/p4api.net/p4bridge/Lock.cpp | |||||
#2 | 8964 | Bill | fix line endings | 11 years ago | |
#1 | 8873 | Matt Attaway | Initial add of the P4API.NET source code | 11 years ago |