From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7603 invoked by alias); 22 Apr 2004 21:51:03 -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 7574 invoked from network); 22 Apr 2004 21:51:02 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 22 Apr 2004 21:51:02 -0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx1.redhat.com (8.12.10/8.12.10) with ESMTP id i3MLp1KG019206 for ; Thu, 22 Apr 2004 17:51:01 -0400 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 i3MLp0w11072; Thu, 22 Apr 2004 17:51:00 -0400 Received: from redhat.com (dhcp-172-16-25-160.sfbay.redhat.com [172.16.25.160]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id i3MLoxC02421; Thu, 22 Apr 2004 14:50:59 -0700 Message-ID: <40883E43.6010200@redhat.com> Date: Thu, 22 Apr 2004 21:51:00 -0000 From: Michael Snyder Organization: Red Hat, Inc. User-Agent: Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.4.2) Gecko/20040301 MIME-Version: 1.0 To: Jeff Johnston CC: gdb-patches@sources.redhat.com Subject: Re: [RFA]: New test for gdb.threads testsuite References: <4068BDB9.1040002@redhat.com> In-Reply-To: <4068BDB9.1040002@redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-RedHat-Spam-Score: 0 X-SW-Source: 2004-04/txt/msg00548.txt.bz2 Jeff Johnston wrote: > The attached testcase tests the new code added recently by Daniel. > > Ok to commit? > > -- Jeff J. > > 2004-03-29 Jeff Johnston > Daniel Jacobowitz > > * gdb.threads/manythreads.c: New testcase. > * gdb.threads/manythreads.exp: Ditto. Looks good to me, Jeff. Please check it in. Michael > ------------------------------------------------------------------------ > > #include > #include > > void * > thread_function (void *arg) > { > int x = (int)arg; > > printf ("Thread <%d> executing\n", x); > > return NULL; > } > > int > main (int argc, char **argv) > { > pthread_attr_t attr; > pthread_t threads[256]; > int i, j; > > pthread_attr_init (&attr); > > /* Create a ton of quick-executing threads, then wait for them to > complete. */ > for (i = 0; i < 1000; ++i) > { > for (j = 0; j < 256; ++j) > { > pthread_create (&threads[j], &attr, thread_function, > (void *)(i * 1000 + j)); > } > > for (j = 0; j < 256; ++j) > { > pthread_join (threads[j], NULL); > } > } > > pthread_attr_destroy (&attr); > > return 0; > } > > > ------------------------------------------------------------------------ > > # manythreads.exp -- Expect script to test stopping many threads > # Copyright (C) 2004 Free Software Foundation, Inc. > > # This program is free software; you can redistribute it and/or modify > # it under the terms of the GNU General Public License as published by > # the Free Software Foundation; either version 2 of the License, or > # (at your option) any later version. > # > # This program is distributed in the hope that it will be useful, > # but WITHOUT ANY WARRANTY; without even the implied warranty of > # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > # GNU General Public License for more details. > # > # You should have received a copy of the GNU General Public License > # along with this program; if not, write to the Free Software > # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. > > # Please email any bugs, comments, and/or additions to this file to: > # bug-gdb@prep.ai.mit.edu > > # This file was written by Jeff Johnston. (jjohnstn@redhat.com) > > if $tracelevel then { > strace $tracelevel > } > > set prms_id 0 > set bug_id 0 > > set testfile "manythreads" > set srcfile ${testfile}.c > set binfile ${objdir}/${subdir}/${testfile} > > if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } { > return -1 > } > > gdb_start > gdb_reinitialize_dir $srcdir/$subdir > gdb_load ${binfile} > gdb_test "set print sevenbit-strings" "" > runto_main > > # We'll need this when we send_gdb a ^C to GDB. Need to do it before we > # run the program and gdb starts saving and restoring tty states. > # On Ultrix, we don't need it and it is really slow (because shell_escape > # doesn't use vfork). > if ![istarget "*-*-ultrix*"] then { > gdb_test "shell stty intr '^C'" "" > } > > set message "first continue" > gdb_test_multiple "continue" "first continue" { > -re "error:.*$gdb_prompt $" { > fail "$message" > } > -re "Continuing" { > pass "$message" > } > } > > # Send a Ctrl-C and verify that we can do info threads and continue > after 1000 {send_gdb "\003"} > set message "stop threads 1" > gdb_test_multiple "" "stop threads 1" { > -re "\\\[New \[^\]\]*\\\]\r\n" { > exp_continue > } > -re "\\\[\[^\]\]* exited\\\]\r\n" { > exp_continue > } > -re "Thread \[^\n\]* executing\r\n" { > exp_continue > } > -re "Program received signal SIGINT.*$gdb_prompt $" { > pass "$message" > } > timeout { > fail "$message (timeout)" > } > } > > gdb_test "info threads" ".*1 Thread.*.LWP.*" > > set message "second continue" > gdb_test_multiple "continue" "second continue" { > -re "error:.*$gdb_prompt $" { > fail "$message" > } > -re "Continuing" { > pass "$message" > } > } > > # Send another Ctrl-C and verify that we can do info threads and quit > after 1000 {send_gdb "\003"} > set message "stop threads 2" > gdb_test_multiple "" "stop threads 2" { > -re "\\\[New \[^\]\]*\\\]\r\n" { > exp_continue > } > -re "\\\[\[^\]\]* exited\\\]\r\n" { > exp_continue > } > -re "Thread \[^\n\]* executing\r\n" { > exp_continue > } > -re "Program received signal SIGINT.*$gdb_prompt $" { > pass "stop threads 2" > } > } > > gdb_test_multiple "quit" "GDB exits after stopping multithreaded program" { > -re "The program is running. Exit anyway\\? \\(y or n\\) $" { > send_gdb "y\n" > exp_continue > } > eof { > pass "GDB exits after stopping multithreaded program" > } > timeout { > fail "GDB exits after stopping multithreaded program (timeout)" > } > } >