Fix threadapply test
authorCarl Love <cel@us.ibm.com>
Fri, 21 May 2021 16:29:26 +0000 (11:29 -0500)
committerCarl Love <cel@us.ibm.com>
Wed, 2 Jun 2021 15:29:36 +0000 (10:29 -0500)
The current test case leaves detached processes running at the end of
the test.  This patch changes the test to use a barrier wait to ensure all
processes exit cleanly at the end of the tests.

gdb/testsuite/ChangeLog:

2021-06-02  Carl Love  <cel@us.ibm.com>

* gdb.threads/threadapply.c: Add global mybarrier.
(main): Add pthread_barrier_init.
(thread_function): Replace while loop with myp increment and
pthread_barrier_wait.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.threads/threadapply.c

index f34812d5580f7263ddc7b03694a70ec0f4bbdeb4..a0469c8623b8678c85bc81181db6eb8b29c7e827 100644 (file)
@@ -1,3 +1,10 @@
+2021-06-02  Carl Love  <cel@us.ibm.com>
+
+       * gdb.threads/threadapply.c: Add global mybarrier.
+       (main): Add pthread_barrier_init.
+       (thread_function): Replace while loop with myp increment and
+       pthread_barrier_wait.
+
 2021-06-02  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * lib/gdb.exp (gdb_compile): Only add the -J option when using a
index 93a3fc8e82d9ef4ad18223bf6d3089e2f8dacc06..1ac99b07fc11214db4a4a77b76ad4f8c8e6b5d1d 100644 (file)
@@ -27,6 +27,7 @@ void *thread_function(void *arg); /* Pointer to function executed by each thread
 #define NUM 5
 
 unsigned int args[NUM+1];
+pthread_barrier_t mybarrier;
 
 int main() {
     int res;
@@ -35,6 +36,8 @@ int main() {
     void *thread_result;
     long i;
 
+    pthread_barrier_init(&mybarrier, NULL, NUM + 1);
+
     for (i = 0; i < NUM; i++)
       {
        args[i] = 1; /* Init value.  */
@@ -69,12 +72,7 @@ void *thread_function(void *arg) {
     int my_number =  (long) arg;
     int *myp = (int *) &args[my_number];
 
-    /* Don't run forever.  Run just short of it :)  */
-    while (*myp > 0)
-      {
-       (*myp) ++;  /* Loop increment.  */
-      }
-
-    pthread_exit(NULL);
+    (*myp) ++;  /* Increment so parent knows child started.  */
+    pthread_barrier_wait(&mybarrier);
 }