From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29168 invoked by alias); 22 Apr 2004 22:20:20 -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 29149 invoked from network); 22 Apr 2004 22:20:19 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 22 Apr 2004 22:20:19 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.12.10/8.12.10) with ESMTP id i3MMKJKG026965 for ; Thu, 22 Apr 2004 18:20:19 -0400 Received: from pobox.toronto.redhat.com (pobox.toronto.redhat.com [172.16.14.4]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id i3MMKIp11503; Thu, 22 Apr 2004 18:20:18 -0400 Received: from touchme.toronto.redhat.com (IDENT:postfix@touchme.toronto.redhat.com [172.16.14.9]) by pobox.toronto.redhat.com (8.12.8/8.12.8) with ESMTP id i3MMKIcU011161; Thu, 22 Apr 2004 18:20:18 -0400 Received: from redhat.com (toocool.toronto.redhat.com [172.16.14.72]) by touchme.toronto.redhat.com (Postfix) with ESMTP id EBADB80008E; Thu, 22 Apr 2004 18:20:17 -0400 (EDT) Message-ID: <4088451F.1090702@redhat.com> Date: Thu, 22 Apr 2004 22:20:00 -0000 From: Jeff Johnston User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 MIME-Version: 1.0 To: Michael Snyder Cc: gdb-patches@sources.redhat.com Subject: Re: [RFA]: New test for gdb.threads testsuite References: <4068BDB9.1040002@redhat.com> <40883E43.6010200@redhat.com> In-Reply-To: <40883E43.6010200@redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2004-04/txt/msg00552.txt.bz2 Michael Snyder wrote: > 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 > Done. Thanks. -- Jeff J. >> ------------------------------------------------------------------------ >> >> #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)" >> } >> } >> > > >