RE: [PATCH] kill all threadapply processes at end of test

Carl Love via Gdb-patches
2021-06-01T15:43:30Z

GDB maintainers, Simon:

On Fri, 2021-05-28 at 21:48 -0400, Simon Marchi wrote:
> <snip>
> Hi,
>
> The code looks good to me, but please add a suitable commit message,
> it should contain a description and explanation of the observed
> problem and the chosen solution, such that somebody not familiar with
> the issue can understand the rationale of the patch.
>
> Simon

I have added a commit message describing the issue with the test and
how the patch fixes the issue.

Please let me know if the patch is acceptable for committing to GDB
mainline. Thanks.

Carl

---------------------------------------------------------------------
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-05-22 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/gdb.threads/threadapply.c | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)

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);
}

--
2.27.0