From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12333 invoked by alias); 9 Oct 2013 14:41:42 -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 12319 invoked by uid 89); 9 Oct 2013 14:41:41 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-4.3 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 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 ESMTP; Wed, 09 Oct 2013 14:41:41 +0000 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r99EfdrY009518 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 9 Oct 2013 10:41:39 -0400 Received: from host2.jankratochvil.net (ovpn-116-51.ams2.redhat.com [10.36.116.51]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r99EfZNJ018444 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NO); Wed, 9 Oct 2013 10:41:37 -0400 Date: Wed, 09 Oct 2013 14:41:00 -0000 From: Jan Kratochvil To: Kai Tietz Cc: gdb-patches@sourceware.org, Tom Tromey Subject: [patchv2] Minor O_CLOEXEC optimization, "regression" fix Message-ID: <20131009144134.GA7506@host2.jankratochvil.net> References: <20131008183214.GB27355@host2.jankratochvil.net> <87li23fsym.fsf@fleche.redhat.com> <20131009131016.GA1603@host2.jankratochvil.net> <173490856.4156973.1381325657769.JavaMail.root@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <173490856.4156973.1381325657769.JavaMail.root@redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes X-SW-Source: 2013-10/txt/msg00274.txt.bz2 On Wed, 09 Oct 2013 15:34:17 +0200, Kai Tietz wrote: > So yes, probing for EINVAL seems to me like a valid way to probe for valid > arguments here. OK, therefore updated the patch. No regressions on {x86_64,x86_64-m32,i686}-fedora21pre-linux-gnu. It still reduces the number of syscalls. Thanks, Jan gdb/ 2013-10-09 Jan Kratochvil * common/filestuff.c (gdb_fopen_cloexec): Remove initialization of result variable. Rename variable fopen_e_ever_failed to fopen_e_ever_failed_einval. Retry fopen only for errno EINVAL. diff --git a/gdb/common/filestuff.c b/gdb/common/filestuff.c index d3b13e8..4032f36 100644 --- a/gdb/common/filestuff.c +++ b/gdb/common/filestuff.c @@ -310,16 +310,16 @@ gdb_open_cloexec (const char *filename, int flags, unsigned long mode) FILE * gdb_fopen_cloexec (const char *filename, const char *opentype) { - FILE *result = NULL; + FILE *result; /* Probe for "e" support once. But, if we can tell the operating system doesn't know about close on exec mode "e" without probing, skip it. E.g., the Windows runtime issues an "Invalid parameter passed to C runtime function" OutputDebugString warning for unknown modes. Assume that if O_CLOEXEC is zero, then "e" isn't supported. */ - static int fopen_e_ever_failed = O_CLOEXEC == 0; + static int fopen_e_ever_failed_einval = O_CLOEXEC == 0; - if (!fopen_e_ever_failed) + if (!fopen_e_ever_failed_einval) { char *copy; @@ -329,15 +329,16 @@ gdb_fopen_cloexec (const char *filename, const char *opentype) this path. */ strcat (copy, "e"); result = fopen (filename, copy); - } - if (result == NULL) - { - /* Fallback. */ - result = fopen (filename, opentype); - if (result != NULL) - fopen_e_ever_failed = 1; + if (result == NULL && errno == EINVAL) + { + result = fopen (filename, opentype); + if (result != NULL) + fopen_e_ever_failed_einval = 1; + } } + else + result = fopen (filename, opentype); if (result != NULL) maybe_mark_cloexec (fileno (result));