[binutils-gdb] Fix threadapply test

Carl Love carll@sourceware.org
Wed Jun 2 15:30:20 GMT 2021


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=170960e8e1413c354a76e3fe83c789407c3dc101

commit 170960e8e1413c354a76e3fe83c789407c3dc101
Author: Carl Love <cel@us.ibm.com>
Date:   Fri May 21 11:29:26 2021 -0500

    Fix threadapply test
    
    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.

Diff:
---
 gdb/testsuite/ChangeLog                 |  7 +++++++
 gdb/testsuite/gdb.threads/threadapply.c | 12 +++++-------
 2 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index f34812d5580..a0469c8623b 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -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
diff --git a/gdb/testsuite/gdb.threads/threadapply.c b/gdb/testsuite/gdb.threads/threadapply.c
index 93a3fc8e82d..1ac99b07fc1 100644
--- a/gdb/testsuite/gdb.threads/threadapply.c
+++ b/gdb/testsuite/gdb.threads/threadapply.c
@@ -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);
 }


More information about the Gdb-cvs mailing list