From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12612 invoked by alias); 5 Nov 2003 19:25:51 -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 12605 invoked from network); 5 Nov 2003 19:25:50 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 5 Nov 2003 19:25:50 -0000 Received: from int-mx2.corp.redhat.com (nat-pool-rdu-dmz.redhat.com [172.16.52.200] (may be forged)) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id hA5JPnM06809 for ; Wed, 5 Nov 2003 14:25:49 -0500 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id hA5JPma19585; Wed, 5 Nov 2003 14:25:48 -0500 Received: from redhat.com (reddwarf.sfbay.redhat.com [172.16.24.50]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id hA5JPlJ12118; Wed, 5 Nov 2003 11:25:47 -0800 Message-ID: <3FA94EBB.2050304@redhat.com> Date: Wed, 05 Nov 2003 19:25:00 -0000 From: Michael Snyder Organization: Red Hat, Inc. User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Michael Elizabeth Chastain CC: gdb-patches@sources.redhat.com Subject: Re: [rfc/testsuite/mi/thread] fix call to sleep in pthreads.c References: <200311051756.hA5HuKXP018763@duracef.shout.net> In-Reply-To: <200311051756.hA5HuKXP018763@duracef.shout.net> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2003-11/txt/msg00064.txt.bz2 Michael Elizabeth Chastain wrote: > This patch changes gdb.mi/pthreads.c so that it gives repeatable results > under gdb. Great, Michael. This needed doing. Approved, and I would encourage you to do it to the parent test as well. > > 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. > > 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. > > 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? > > 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"); > } > >