/* * /+\ * +\ Copyright 1995, 2000 Perforce Software. All rights reserved. * \+/ * * This file is part of Perforce - the FAST SCM System. */ #include <windows.h> #include <stdio.h> #include <winsvc.h> #include "ntthdlist.h" NtThreadList::NtThreadList() { head = 0; listSize = 0; InitializeCriticalSection( §ion ); } NtThreadList::~NtThreadList() { NtThreadEntry *entry; EnterCriticalSection( §ion ); while( ( entry = head ) ) { head = head->next; delete entry; } LeaveCriticalSection( §ion ); DeleteCriticalSection( §ion ); } void NtThreadList::AddThread( void *k, DWORD t ) { NtThreadEntry *entry = new NtThreadEntry(); entry->key = k; entry->tid = t; entry->prev = 0; EnterCriticalSection( §ion ); entry->next = head; if( head ) head->prev = entry; head = entry; listSize++; LeaveCriticalSection( §ion ); } int NtThreadList::RemoveThread( void *k ) { NtThreadEntry *entry; EnterCriticalSection( §ion ); entry = head; while( entry ) { if( entry->key == k ) { if( entry->next ) entry->next->prev = entry->prev; if( entry->prev ) entry->prev->next = entry->next; if( head == entry ) head = entry->next; break; } entry = entry->next; } listSize--; LeaveCriticalSection( §ion ); if( entry ) { delete entry; return 1; } return 0; } void NtThreadList::SuspendThreads() { NtThreadEntry *entry; HANDLE h; EnterCriticalSection( §ion ); entry = head; while( entry ) { h = OpenThread( THREAD_ALL_ACCESS, FALSE, entry->tid ); if( h != NULL ) { SuspendThread( h ); CloseHandle( h ); } entry = entry->next; } LeaveCriticalSection( §ion ); } #if 0 int NtThreadList::GetThread( DWORD *tid ) { NtThreadEntry *entry; EnterCriticalSection( §ion ); entry = head; if( entry ) { head = entry->next; if( head ) head->prev = 0; } LeaveCriticalSection( §ion ); if( entry ) { *tid = entry->tid; delete entry; return 1; } return 0; } #endif int NtThreadList::Empty() { int result; EnterCriticalSection( §ion ); result = head == 0; LeaveCriticalSection( §ion ); return result; } int NtThreadList::GetThreadCount() { int result; EnterCriticalSection( §ion ); result = listSize; LeaveCriticalSection( §ion ); return result; }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 14945 | Newtopian |
Merging //guest/perforce_software/p4/... to //guest/Newtopian/p4/... |
||
//guest/perforce_software/p4/2014.1/sys/ntthdlist.cc | |||||
#1 | 12188 | Matt Attaway | Move 'main' p4 into a release specific directory in prep for new releases | ||
//guest/perforce_software/p4/sys/ntthdlist.cc | |||||
#1 | 9129 | Matt Attaway | Initial commit of the 2014.1 p4/p4api source code |