diff options
author | rpj <rpj> | 2005-04-06 02:16:29 +0000 |
---|---|---|
committer | rpj <rpj> | 2005-04-06 02:16:29 +0000 |
commit | 6e1c5f6a98f24308e3c9fa9f01101de6dd810153 (patch) | |
tree | 8e63d2a6f6b5de69c4b9a3a5f425f5e7db7f45d7 /tests/cleanup3.c | |
parent | baacf6c941b44504f703463b053de357a8adb607 (diff) |
fix unguarded global variable access
Diffstat (limited to 'tests/cleanup3.c')
-rw-r--r-- | tests/cleanup3.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/tests/cleanup3.c b/tests/cleanup3.c index a12337d..b595ab4 100644 --- a/tests/cleanup3.c +++ b/tests/cleanup3.c @@ -93,14 +93,21 @@ struct bag_t_ { static bag_t threadbag[NUMTHREADS + 1]; -static int pop_count = 0; +typedef struct { + int i; + CRITICAL_SECTION cs; +} sharedInt_t; + +static sharedInt_t pop_count = {0, {0}}; static void increment_pop_count(void * arg) { - int * c = (int *) arg; + sharedInt_t * sI = (sharedInt_t *) arg; - (*c)++; + EnterCriticalSection(&sI->cs); + sI->i++; + LeaveCriticalSection(&sI->cs); } void * @@ -120,7 +127,9 @@ mythread(void * arg) sched_yield(); - pop_count--; + EnterCriticalSection(&pop_count.cs); + pop_count.i--; + LeaveCriticalSection(&pop_count.cs); pthread_cleanup_pop(0); #ifdef _MSC_VER @@ -137,6 +146,8 @@ main() int i; pthread_t t[NUMTHREADS + 1]; + InitializeCriticalSection(&pop_count.cs); + assert((t[0] = pthread_self()).p != NULL); for (i = 1; i <= NUMTHREADS; i++) @@ -190,7 +201,9 @@ main() assert(!failed); - assert(pop_count == -(NUMTHREADS)); + assert(pop_count.i == -(NUMTHREADS)); + + DeleteCriticalSection(&pop_count.cs); /* * Success. |