Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/testsuite')
-rw-r--r--winsup/testsuite/winsup.api/pthread/cancel3.c24
-rw-r--r--winsup/testsuite/winsup.api/pthread/cancel5.c24
2 files changed, 36 insertions, 12 deletions
diff --git a/winsup/testsuite/winsup.api/pthread/cancel3.c b/winsup/testsuite/winsup.api/pthread/cancel3.c
index 832fe2e3f..07feb7c9b 100644
--- a/winsup/testsuite/winsup.api/pthread/cancel3.c
+++ b/winsup/testsuite/winsup.api/pthread/cancel3.c
@@ -75,11 +75,22 @@ mythread(void * arg)
assert(pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL) == 0);
/*
- * We wait up to 10 seconds, waking every 0.1 seconds,
- * for a cancelation to be applied to us.
+ * We wait up to 10 seconds for a cancelation to be applied to us.
*/
- for (bag->count = 0; bag->count < 100; bag->count++)
- Sleep(100);
+ for (bag->count = 0; bag->count < 10; bag->count++)
+ {
+ /* Busy wait to avoid Sleep(), since we can't asynchronous cancel inside a
+ kernel function. (This is still somewhat fragile as if the async cancel
+ can fail if it happens to occur while we're inside the kernel function
+ that time() calls...) */
+ time_t start = time(NULL);
+ while ((time(NULL) - start) < 1)
+ {
+ int i;
+ for (i = 0; i < 1E7; i++)
+ __asm__ volatile ("pause":::);
+ }
+ }
return result;
}
@@ -149,10 +160,11 @@ main()
if (fail)
{
- fprintf(stderr, "Thread %d: started %d: count %d\n",
+ fprintf(stderr, "Thread %d: started %d: count %d: result %d \n",
i,
threadbag[i].started,
- threadbag[i].count);
+ threadbag[i].count,
+ result);
}
failed = (failed || fail);
}
diff --git a/winsup/testsuite/winsup.api/pthread/cancel5.c b/winsup/testsuite/winsup.api/pthread/cancel5.c
index 8b7240615..999b3c95c 100644
--- a/winsup/testsuite/winsup.api/pthread/cancel5.c
+++ b/winsup/testsuite/winsup.api/pthread/cancel5.c
@@ -76,11 +76,22 @@ mythread(void * arg)
assert(pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL) == 0);
/*
- * We wait up to 10 seconds, waking every 0.1 seconds,
- * for a cancelation to be applied to us.
+ * We wait up to 10 seconds for a cancelation to be applied to us.
*/
- for (bag->count = 0; bag->count < 100; bag->count++)
- Sleep(100);
+ for (bag->count = 0; bag->count < 10; bag->count++)
+ {
+ /* Busy wait to avoid Sleep(), since we can't asynchronous cancel inside a
+ kernel function. (This is still somewhat fragile as if the async cancel
+ can fail if it happens to occur while we're inside the kernel function
+ that time() calls...) */
+ time_t start = time(NULL);
+ while ((time(NULL) - start) < 1)
+ {
+ int i;
+ for (i = 0; i < 1E7; i++)
+ __asm__ volatile ("pause":::);
+ }
+ }
return result;
}
@@ -148,10 +159,11 @@ main()
if (fail)
{
- fprintf(stderr, "Thread %d: started %d: count %d\n",
+ fprintf(stderr, "Thread %d: started %d: count %d: result %d\n",
i,
threadbag[i].started,
- threadbag[i].count);
+ threadbag[i].count,
+ result);
}
failed = (failed || fail);
}