From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28461 invoked by alias); 11 Dec 2012 15:37:17 -0000 Received: (qmail 28302 invoked by uid 22791); 11 Dec 2012 15:37:16 -0000 X-SWARE-Spam-Status: No, hits=-4.7 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL,TW_CP X-Spam-Check-By: sourceware.org Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 11 Dec 2012 15:37:07 +0000 Received: from svr-orw-exc-10.mgc.mentorg.com ([147.34.98.58]) by relay1.mentorg.com with esmtp id 1TiRtJ-0007Di-4t from Ali_Anwar@mentor.com ; Tue, 11 Dec 2012 07:37:05 -0800 Received: from SVR-ORW-FEM-04.mgc.mentorg.com ([147.34.97.41]) by SVR-ORW-EXC-10.mgc.mentorg.com with Microsoft SMTPSVC(6.0.3790.4675); Tue, 11 Dec 2012 07:37:04 -0800 Received: from [137.202.157.121] (147.34.91.1) by SVR-ORW-FEM-04.mgc.mentorg.com (147.34.97.41) with Microsoft SMTP Server (TLS) id 14.1.289.1; Tue, 11 Dec 2012 07:37:03 -0800 Message-ID: <50C75319.9080903@codesourcery.com> Date: Tue, 11 Dec 2012 15:37:00 -0000 From: ali_anwar User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/17.0 Thunderbird/17.0 MIME-Version: 1.0 To: Tom Tromey CC: Subject: Re: Updated patch for Bug 13217 - thread apply all detach throws a SEGFAULT References: <5062EA9B.1060505@codesourcery.com> <871uhnwkf3.fsf@fleche.redhat.com> <50C62BBB.6010404@codesourcery.com> <87hantek1p.fsf@fleche.redhat.com> In-Reply-To: <87hantek1p.fsf@fleche.redhat.com> Content-Type: multipart/mixed; boundary="------------030404070602080207030001" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-12/txt/msg00338.txt.bz2 --------------030404070602080207030001 Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit Content-length: 673 On 12/11/2012 01:20 AM, Tom Tromey wrote: >>>>>> "Ali" == ali anwar writes: > > Ali> + if (thread_count ()) > Ali> + { > Ali> + struct thread_info tp_array [thread_count ()]; > > You can't use variable-length arrays in gdb. > Probably xmalloc and a cleanup is your best option here. > Removed the array, now using xmalloc and xfree. > Ali> + for(k = 0; k != i; k++) > > Space between 'for' and '('. > Added a space. > Ali> + switch_to_thread ((&tp_array [k])->ptid); > > No space before '['. This occurs in a couple places. > Removed a space. > Tom > Thanks for the review. PFA the modified patch. Regards, -Ali --------------030404070602080207030001 Content-Type: text/x-patch; name="issue_13369.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="issue_13369.patch" Content-length: 3227 Index: ChangeLog =================================================================== RCS file: /cvs/src/src/gdb/ChangeLog,v retrieving revision 1.14894 diff -u -r1.14894 ChangeLog --- ChangeLog 9 Dec 2012 18:39:57 -0000 1.14894 +++ ChangeLog 11 Dec 2012 15:26:11 -0000 @@ -1,3 +1,9 @@ +2012-12-10 Ali Anwar + + PR threads/13217 + * thread.c (thread_apply_all_command): Check for valid threads + and thread count. + 2012-12-09 Jan Kratochvil * configure.ac (CC_HAS_LONG_LONG): Replace by AC_MSG_ERROR. Index: thread.c =================================================================== RCS file: /cvs/src/src/gdb/thread.c,v retrieving revision 1.149 diff -u -r1.149 thread.c --- thread.c 27 Jul 2012 00:52:36 -0000 1.149 +++ thread.c 11 Dec 2012 15:31:52 -0000 @@ -1178,7 +1178,6 @@ static void thread_apply_all_command (char *cmd, int from_tty) { - struct thread_info *tp; struct cleanup *old_chain; char *saved_cmd; @@ -1193,18 +1192,32 @@ execute_command. */ saved_cmd = xstrdup (cmd); make_cleanup (xfree, saved_cmd); - for (tp = thread_list; tp; tp = tp->next) - if (thread_alive (tp)) - { - switch_to_thread (tp->ptid); - - printf_filtered (_("\nThread %d (%s):\n"), - tp->num, target_pid_to_str (inferior_ptid)); - execute_command (cmd, from_tty); - strcpy (cmd, saved_cmd); /* Restore exact command used - previously. */ - } + if (thread_count ()) + { + struct thread_info *tp_array; + struct thread_info *tp; + int i, k; + + /* Save a copy of the thread_list in case we execute detach + command. */ + tp_array = xmalloc (sizeof (struct thread_info) * thread_count ()); + for (i = 0, tp = thread_list; tp; i++, tp = tp->next) + tp_array[i] = *tp; + + for (k = 0; k != i; k++) + if (thread_alive (&tp_array[k])) + { + switch_to_thread ((&tp_array[k])->ptid); + + printf_filtered (_("\nThread %d (%s):\n"), + (&tp_array[k])->num, target_pid_to_str (inferior_ptid)); + execute_command (cmd, from_tty); + strcpy (cmd, saved_cmd); /* Restore exact command used + previously. */ + } + xfree (tp_array); + } do_cleanups (old_chain); } Index: testsuite/gdb.threads/threadapply.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.threads/threadapply.exp,v retrieving revision 1.15 diff -u -r1.15 threadapply.exp --- testsuite/gdb.threads/threadapply.exp 26 Jun 2012 19:23:20 -0000 1.15 +++ testsuite/gdb.threads/threadapply.exp 11 Dec 2012 15:26:20 -0000 @@ -63,3 +63,4 @@ gdb_test "up" ".*in main.*" "go up in the stack frame" gdb_test "thread apply all print 1" "Thread ..*\\\$\[0-9]+ = 1.*Thread ..*\\\$\[0-9]+ = 1.*Thread ..*\\\$\[0-9]+ = 1.*Thread ..*\\\$\[0-9]+ = 1.*Thread ..*\\\$\[0-9]+ = 1.*Thread ..*\\\$\[0-9]+ = 1" "run a simple print command on all threads" gdb_test "down" "#0.*thread_function.*" "go down and check selected frame" +gdb_test "thread apply all detach" "Detaching from.*" "detach all threads" --------------030404070602080207030001--