summaryrefslogtreecommitdiff
path: root/tests/once3.c
diff options
context:
space:
mode:
authorrpj <rpj>2006-12-22 02:36:40 +0000
committerrpj <rpj>2006-12-22 02:36:40 +0000
commit9e61bc0571b4812381cf89dd6f4bcbe3931f6acd (patch)
tree2b60eec9340369ed259a9d1de422ac5ec3eb9291 /tests/once3.c
parent1beb00e609d241ee6c2048c476e2240f05033cbd (diff)
Diffstat (limited to 'tests/once3.c')
-rw-r--r--tests/once3.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/tests/once3.c b/tests/once3.c
index 51d2daa..981bbf7 100644
--- a/tests/once3.c
+++ b/tests/once3.c
@@ -34,7 +34,7 @@
* --------------------------------------------------------------------------
*
* Create several pthread_once objects and channel several threads
- * through each. Make the init_routine cancelable and cancel them
+ * through each. Make the init_routine cancelable and cancel them with
* waiters waiting.
*
* Depends on API functions:
@@ -45,6 +45,8 @@
* pthread_once()
*/
+#define ASSERT_TRACE
+
#include "test.h"
#define NUM_THREADS 100 /* Targeting each once control */
@@ -66,6 +68,7 @@ myfunc(void)
{
EnterCriticalSection(&numOnce.cs);
numOnce.i++;
+ assert(numOnce.i > 0);
LeaveCriticalSection(&numOnce.cs);
/* Simulate slow once routine so that following threads pile up behind it */
Sleep(10);
@@ -78,11 +81,11 @@ mythread(void * arg)
{
/*
* Cancel every thread. These threads are deferred cancelable only, so
- * only the thread performing the init_routine will see it (there are
+ * only the thread performing the once routine (my_func) will see it (there are
* no other cancelation points here). The result will be that every thread
- * eventually cancels only when it becomes the new initter.
+ * eventually cancels only when it becomes the new once thread.
*/
- pthread_cancel(pthread_self());
+ assert(pthread_cancel(pthread_self()) == 0);
assert(pthread_once(&once[(int) arg], myfunc) == 0);
EnterCriticalSection(&numThreads.cs);
numThreads.i++;