This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH v2 3/3] Add test for thread names
- From: Pedro Alves <palves at redhat dot com>
- To: Simon Marchi <simon dot marchi at ericsson dot com>, gdb-patches at sourceware dot org
- Date: Thu, 26 Nov 2015 11:45:06 +0000
- Subject: Re: [PATCH v2 3/3] Add test for thread names
- Authentication-results: sourceware.org; auth=none
- References: <1448488138-2360-1-git-send-email-simon dot marchi at ericsson dot com> <1448488138-2360-4-git-send-email-simon dot marchi at ericsson dot com>
On 11/25/2015 09:48 PM, Simon Marchi wrote:
> +int
> +main (int argc, char **argv)
> +{
> + pthread_t threads[NUM_THREADS];
> + struct thread_data args[NUM_THREADS];
> + pthread_barrier_t barrier;
> + int i;
> + const char *names[] = { "carrot", "potato", "celery" };
Add an alarm call so the process doesn't run forever if something
goes wrong and it gets detached / reparented to init.
> +
> + /* Make sure that NAMES contains NUM_THREADS elements. */
> + assert (sizeof (names) == sizeof(names[0]) * NUM_THREADS);
> +
> + assert (0 == pthread_barrier_init (&barrier, NULL, NUM_THREADS + 1));
There should be no side-effects in assert calls:
res = pthread_barrier_init (&barrier, NULL, NUM_THREADS + 1));
assert (res == 0);
> +
> + pthread_setname_np (pthread_self (), "main");
> +
> + for (i = 0; i < NUM_THREADS; i++)
> + {
> + struct thread_data *arg = &args[i];
> +
> + arg->name = names[i];
> + arg->barrier = &barrier;
> +
> + assert (0 == pthread_create (&threads[i], NULL, thread_func, arg));
Ditto.
> + }
> +
> + pthread_barrier_wait (&barrier);
> +
> + all_threads_ready ();
> +
> + return 0;
> +}
OK with above fixed.
> +set expected_thread_list "\\* 1 .*\"main\" all_threads_ready.*\n"
> +append expected_thread_list " 2 .*\"carrot\".*\n"
> +append expected_thread_list " 3 .*\"potato\".*\n"
> +append expected_thread_list " 4 .*\"celery\".*"
> +
> +gdb_test "info threads" "$expected_thread_list" "list threads"
Note you can do this with multi_line. E.g.:
gdb_test "info threads" \
[multi_line \
"\\* 1 .*\"main\" all_threads_ready.*" \
" 2 .*\"carrot\".*" \
" 3 .*\"potato\".*" \
" 4 .*\"celery\".*"] \
"list threads"
Thanks,
Pedro Alves