From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9523 invoked by alias); 5 Nov 2003 19:21:11 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 9483 invoked from network); 5 Nov 2003 19:21:10 -0000 Received: from unknown (HELO localhost.redhat.com) (66.30.197.194) by sources.redhat.com with SMTP; 5 Nov 2003 19:21:10 -0000 Received: by localhost.redhat.com (Postfix, from userid 469) id 72BAC1A4291; Wed, 5 Nov 2003 14:21:09 -0500 (EST) From: Elena Zannoni MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <16297.19877.371819.187468@localhost.redhat.com> Date: Wed, 05 Nov 2003 19:21:00 -0000 To: Michael Elizabeth Chastain Cc: gdb-patches@sources.redhat.com Subject: Re: [rfc/testsuite/mi/thread] fix call to sleep in pthreads.c In-Reply-To: <200311051756.hA5HuKXP018763@duracef.shout.net> References: <200311051756.hA5HuKXP018763@duracef.shout.net> X-SW-Source: 2003-11/txt/msg00063.txt.bz2 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 > > * 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"); > } >