From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 58886 invoked by alias); 24 Mar 2015 16:17:57 -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 58871 invoked by uid 89); 24 Mar 2015 16:17:56 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS,T_RP_MATCHES_RCVD 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 (AES256-GCM-SHA384 encrypted) ESMTPS; Tue, 24 Mar 2015 16:17:55 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 3448BC1F07 for ; Tue, 24 Mar 2015 16:17:54 +0000 (UTC) Received: from blade.nx (ovpn-116-111.ams2.redhat.com [10.36.116.111]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t2OGHrol014228; Tue, 24 Mar 2015 12:17:53 -0400 Received: by blade.nx (Postfix, from userid 1000) id A7995264107; Tue, 24 Mar 2015 16:17:52 +0000 (GMT) Date: Tue, 24 Mar 2015 16:17:00 -0000 From: Gary Benson To: Pedro Alves Cc: gdb-patches@sourceware.org Subject: Re: [PATCH v2] Associate target_ops with target_fileio file descriptors Message-ID: <20150324161752.GA10601@blade.nx> References: <20150318184538.GA32134@blade.nx> <1426867612-32278-1-git-send-email-gbenson@redhat.com> <5511651F.4050400@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5511651F.4050400@redhat.com> X-IsSubscribed: yes X-SW-Source: 2015-03/txt/msg00795.txt.bz2 Pedro Alves wrote: > On 03/20/2015 04:06 PM, Gary Benson wrote: > > + > > + /* Search for closed handles to reuse. */ > > + if (lowest_closed_fd >= 0) > > + { > > + for (index = lowest_closed_fd; > > + VEC_iterate (fileio_fh_t, fileio_fhandles, index, fh); > > + index++) > > + if (is_closed_fileio_fh (fh->fd)) > > + break; > > You don't really need 'index'. If this walks using > lowest_closed_fd instead, like: > > for (; > VEC_iterate (fileio_fh_t, fileio_fhandles, > lowest_closed_fd, fh); > lowest_closed_fd++) > if (is_closed_fileio_fh (fh->fd)) > break; > > Then the next time around we skip slots we already know are > open. > > > + } > > + > > + /* Push a new handle if no closed handles were found. */ > > + if (index == total) > > + { > > + fh = VEC_safe_push (fileio_fh_t, fileio_fhandles, NULL); > > + lowest_closed_fd = -1; > > + } > > + > > + /* Fill in the handle and return its index. */ > > + fh->t = t; > > + fh->fd = fd; > > + > > + return index; > > +} You do need another variable though. The function returns the index of the file handle it just used, so you need to save that across the bit that sets lowest_closed_fd to -1. I rearranged things to this, but it's longer and I'd argue harder to follow: /* Acquire a target fileio file descriptor. */ static int acquire_fileio_fd (struct target_ops *t, int fd) { int total = VEC_length (fileio_fh_t, fileio_fhandles); int index = total; fileio_fh_t *fh, buf; gdb_assert (!is_closed_fileio_fh (fd)); /* Search for closed handles to reuse. */ if (lowest_closed_fd >= 0) { for (; VEC_iterate (fileio_fh_t, fileio_fhandles, lowest_closed_fd, fh); lowest_closed_fd++) if (is_closed_fileio_fh (fh->fd)) break; index = lowest_closed_fd; } /* Push a new handle if no closed handles were found. */ if (index == total) { fh = VEC_safe_push (fileio_fh_t, fileio_fhandles, NULL); lowest_closed_fd = -1; } /* Fill in the handle and return its index. */ fh->t = t; fh->fd = fd; return index; } Do you prefer that? I noticed you can do "lowest_closed_fd++" if you don't create a new handle, so whichever way you like I'll add that micro-optimization. Cheers, Gary -- http://gbenson.net/