From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 123299 invoked by alias); 1 Feb 2016 19:38:20 -0000 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 Received: (qmail 123284 invoked by uid 89); 1 Feb 2016 19:38:19 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:1237, UD:forking-threads-plus-breakpoint.exp, gdbthreads, gdb.threads X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Mon, 01 Feb 2016 19:38:18 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id 48B6E8E69C; Mon, 1 Feb 2016 19:38:17 +0000 (UTC) Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u11JcFIM030677; Mon, 1 Feb 2016 14:38:16 -0500 Message-ID: <56AFB427.2070909@redhat.com> Date: Mon, 01 Feb 2016 19:38:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Don Breazeal , gdb-patches@sourceware.org Subject: Re: [PATCH 2/3] PR remote/19496, interrupted syscall in forking-threads-plus-bkpt References: <1453942111-1215-1-git-send-email-donb@codesourcery.com> <1453942111-1215-3-git-send-email-donb@codesourcery.com> In-Reply-To: <1453942111-1215-3-git-send-email-donb@codesourcery.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-SW-Source: 2016-02/txt/msg00018.txt.bz2 On 01/28/2016 12:48 AM, Don Breazeal wrote: > This patch addresses "fork:Interrupted system call" (or wait:) failures > in gdb.threads/forking-threads-plus-breakpoint.exp. > > The test program spawns ten threads, each of which do ten fork/waitpid > sequences. The cause of the problem was that when one of the fork > children exited before the corresponding fork parent could initiate its > waitpid for that child, a SIGCHLD was delivered and interrupted a fork > or waitpid in another thread. > > The fix was to wrap the system calls in a loop to retry the call if > it was interrupted, like: > > do > { > pid = fork (); > } > while (pid == -1 && errno == EINTR); > > Since this is a Linux-only test I figure it is OK to use errno and EINTR. > > Tested on Nios II Linux target with x86 Linux host. I'd prefer to avoid this if possible. These loops potentially hide bugs like ERESTARTSYS escaping out of a syscall and mishandling of signals. See bc9540e842eb5639ca59cb133adef211d252843c for example: https://sourceware.org/ml/gdb-patches/2015-02/msg00654.html How about setting SIGCHLD to SIG_IGN, or making SIGCHLD be SA_RESTART? Thanks, Pedro Alves