1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-29 16:23:09 +00:00

Destroy wait conditions before exiting

We already do this for locks. Also rename SitIdleEvent
in WaitCond to be uniform with Lunix naming.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2010-10-17 08:16:46 +01:00
parent 1fdb436e78
commit 3a564ed5db
2 changed files with 14 additions and 17 deletions

View file

@ -27,12 +27,13 @@
# include <pthread.h>
typedef pthread_mutex_t Lock;
typedef pthread_cond_t WaitCondition;
# define lock_init(x) pthread_mutex_init(x, NULL)
# define lock_grab(x) pthread_mutex_lock(x)
# define lock_release(x) pthread_mutex_unlock(x)
# define lock_destroy(x) pthread_mutex_destroy(x)
# define cond_destroy(x) pthread_cond_destroy(x);
#else
@ -41,11 +42,13 @@ typedef pthread_mutex_t Lock;
#undef WIN32_LEAN_AND_MEAN
typedef CRITICAL_SECTION Lock;
typedef HANDLE WaitCondition;
# define lock_init(x) InitializeCriticalSection(x)
# define lock_grab(x) EnterCriticalSection(x)
# define lock_release(x) LeaveCriticalSection(x)
# define lock_destroy(x) DeleteCriticalSection(x)
# define cond_destroy(x) CloseHandle(*x);
#endif

View file

@ -96,15 +96,8 @@ namespace {
int ActiveThreads;
volatile bool AllThreadsShouldExit, AllThreadsShouldSleep;
Thread threads[MAX_THREADS];
Lock MPLock, WaitLock;
#if !defined(_MSC_VER)
pthread_cond_t WaitCond[MAX_THREADS];
#else
HANDLE SitIdleEvent[MAX_THREADS];
#endif
WaitCondition WaitCond[MAX_THREADS];
};
@ -2243,7 +2236,7 @@ split_point_start: // At split points actual search starts from here
pthread_cond_wait(&WaitCond[threadID], &WaitLock);
lock_release(&WaitLock);
#else
WaitForSingleObject(SitIdleEvent[threadID], INFINITE);
WaitForSingleObject(WaitCond[threadID], INFINITE);
#endif
}
@ -2306,10 +2299,6 @@ split_point_start: // At split points actual search starts from here
volatile int i;
bool ok;
#if !defined(_MSC_VER)
pthread_t pthread[1];
#endif
// Initialize global locks
lock_init(&MPLock);
lock_init(&WaitLock);
@ -2318,7 +2307,7 @@ split_point_start: // At split points actual search starts from here
#if !defined(_MSC_VER)
pthread_cond_init(&WaitCond[i], NULL);
#else
SitIdleEvent[i] = CreateEvent(0, FALSE, FALSE, 0);
WaitCond[i] = CreateEvent(0, FALSE, FALSE, 0);
#endif
// Initialize splitPoints[] locks
@ -2343,6 +2332,7 @@ split_point_start: // At split points actual search starts from here
{
#if !defined(_MSC_VER)
pthread_t pthread[1];
ok = (pthread_create(pthread, NULL, init_thread, (void*)(&i)) == 0);
#else
ok = (CreateThread(NULL, 0, init_thread, (LPVOID)(&i), 0, NULL) != NULL);
@ -2382,6 +2372,10 @@ split_point_start: // At split points actual search starts from here
lock_destroy(&WaitLock);
lock_destroy(&MPLock);
// Now we can safely destroy the wait conditions
for (int i = 0; i < MAX_THREADS; i++)
cond_destroy(&WaitCond[i]);
}
@ -2579,7 +2573,7 @@ split_point_start: // At split points actual search starts from here
pthread_cond_signal(&WaitCond[threadID]);
pthread_mutex_unlock(&WaitLock);
#else
SetEvent(SitIdleEvent[threadID]);
SetEvent(WaitCond[threadID]);
#endif
}