This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [rfc/testsuite/mi/thread] fix call to sleep in pthreads.c
- From: Elena Zannoni <ezannoni at redhat dot com>
- To: Michael Elizabeth Chastain <mec at shout dot net>
- Cc: gdb-patches at sources dot redhat dot com
- Date: Wed, 5 Nov 2003 14:21:09 -0500
- Subject: Re: [rfc/testsuite/mi/thread] fix call to sleep in pthreads.c
- References: <200311051756.hA5HuKXP018763@duracef.shout.net>
Michael Elizabeth Chastain writes:
> This patch changes gdb.mi/pthreads.c so that it gives repeatable results
> under gdb.
>
> Currently, the gdb.mi/mi*-pthreads.exp tests give irregular results
> because the call to sleep() will often return prematurely. Thus, many
> of the threads exit before the test script can see them. All the
> results are PASS, but there are different PASSes on different test runs.
>
> With this patch, all the threads live as long as they are intended to
> live, so that the test script sees all the threads.
Thank you! I love this.
>
> This patch has a disadvantage. gdb is supposed to work with all kinds
> of inferior programs, not just well-written inferior programs.
> Arguably, I should live pthreads.c alone, and change the *.exp files to
> be more flexible about what they recognize.
>
Nah, the purpose of the testsuite is to find regressions, and for that
you need repeatable test results.
> I thought about that approach and decided that I like it better if the
> test program covers what it is intended to cover (thread backtraces)
> even at the expense of other coverage (of nothing particularly useful).
> Also, gdb.threads/pthreads.c still has the broken call to sleep()
> with no return value checking, so we do still have an instance of this
> programming idiom in the test corpus.
>
> My motivation for doing this is that I'm processing two million
> test results on every spin, so the more uniform and regular they are,
> the less work I have to do. This also helps anyone who compares
> test runs with 'diff' or with Andrew's script.
>
> Testing: I'm in the process of testing this. So far it looks okay
> but I won't say anything until the test bed finishes.
>
> Anyways ... comments?
I like the comment. ;-)
elena
>
> Michael C
>
> 2003-11-05 Michael Chastain <mec@shout.net>
>
> * gdb.mi/pthreads.c (routine): Handle early return from sleep.
>
> Index: pthreads.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/pthreads.c,v
> retrieving revision 1.4
> diff -c -3 -p -r1.4 pthreads.c
> *** pthreads.c 24 Oct 2003 19:55:09 -0000 1.4
> --- pthreads.c 5 Nov 2003 17:43:00 -0000
> *************** static pthread_attr_t null_attr;
> *** 42,48 ****
> void *
> routine (void *arg)
> {
> ! sleep (9);
> printf ("hello thread\n");
> }
>
> --- 42,55 ----
> void *
> routine (void *arg)
> {
> ! /* When gdb is running, it sets hidden breakpoints in the thread
> ! library. The signals caused by these hidden breakpoints can
> ! cause system calls such as 'sleep' to return early. Pay attention
> ! to the return value from 'sleep' to get the full sleep. */
> ! int unslept = 9;
> ! while (unslept > 0)
> ! unslept = sleep (unslept);
> !
> printf ("hello thread\n");
> }
>