From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5821 invoked by alias); 13 Jun 2012 10:04:08 -0000 Received: (qmail 5806 invoked by uid 22791); 13 Jun 2012 10:04:07 -0000 X-SWARE-Spam-Status: No, hits=-5.1 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE X-Spam-Check-By: sourceware.org Received: from mail-pz0-f54.google.com (HELO mail-pz0-f54.google.com) (209.85.210.54) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 13 Jun 2012 10:03:52 +0000 Received: by dadv36 with SMTP id v36so779923dad.13 for ; Wed, 13 Jun 2012 03:03:52 -0700 (PDT) Received: by 10.68.237.202 with SMTP id ve10mr5792844pbc.54.1339581831907; Wed, 13 Jun 2012 03:03:51 -0700 (PDT) Received: from [192.168.1.128] ([115.193.194.237]) by mx.google.com with ESMTPS id rv5sm5240503pbc.56.2012.06.13.03.03.48 (version=SSLv3 cipher=OTHER); Wed, 13 Jun 2012 03:03:50 -0700 (PDT) Message-ID: <4FD86616.9010502@gmail.com> Date: Wed, 13 Jun 2012 10:04:00 -0000 From: asmwarrior User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20120604 Thunderbird/13.0 MIME-Version: 1.0 To: Pedro Alves CC: gdb@sourceware.org Subject: Re: [mingw] build error of the latest CVS References: <4FD7DC8B.5060403@gmail.com> <4FD7DD2B.6070500@gmail.com> <4FD85BE8.6070100@redhat.com> <4FD85FEB.7090109@redhat.com> <4FD8636E.8050406@gmail.com> <4FD863EA.6080806@redhat.com> In-Reply-To: <4FD863EA.6080806@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2012-06/txt/msg00071.txt.bz2 On 2012-6-13 17:56, Pedro Alves wrote: > You don't say how your patch looked like, but I'm hoping it's not > the same as mine, otherwise I'll need to go back to the drawing board:-) My patch is too ugly and dirty, I just create a dummy function body: struct serial * serial_for_fd (int fd) { return serial_fdopen (fd); } But this cause the hang problems. > > Could you try the patch below on top of current mainline? > >> >So, I revert you three commit about serial.c, and now gdb cvs Head build and works OK. >> >see:http://sourceware.org/bugzilla/show_bug.cgi?id=14227 > Thanks. > > 2012-06-13 Pedro Alves > > Partial revert of previous change. > > * serial.c (scb_base): New global. > (serial_for_fd): New. > (serial_open, serial_fdopen_ops): Link new serial in open serials > chain. > (do_serial_close): Unlink serial from the open serials chain. > --- > > gdb/serial.c | 35 +++++++++++++++++++++++++++++++++++ > gdb/serial.h | 1 + > 2 files changed, 36 insertions(+), 0 deletions(-) > > diff --git a/gdb/serial.c b/gdb/serial.c > index 1140feb..df18b2f 100644 > --- a/gdb/serial.c > +++ b/gdb/serial.c > @@ -33,6 +33,10 @@ static int global_serial_debug_p; > > static struct serial_ops *serial_ops_list = NULL; > > +/* Pointer to list of scb's. */ > + > +static struct serial *scb_base; > + > /* Non-NULL gives filename which contains a recording of the remote session, > suitable for playback by gdbserver. */ > > @@ -157,6 +161,21 @@ serial_add_interface (struct serial_ops *optable) > serial_ops_list = optable; > } > > +/* Return the open serial device for FD, if found, or NULL if FD is > + not already opened. */ > + > +struct serial * > +serial_for_fd (int fd) > +{ > + struct serial *scb; > + > + for (scb = scb_base; scb; scb = scb->next) > + if (scb->fd == fd) > + return scb; > + > + return NULL; > +} > + > /* Open up a device or a network socket, depending upon the syntax of NAME. */ > > struct serial * > @@ -206,10 +225,12 @@ serial_open (const char *name) > } > > scb->name = xstrdup (name); > + scb->next = scb_base; > scb->debug_p = 0; > scb->async_state = 0; > scb->async_handler = NULL; > scb->async_context = NULL; > + scb_base = scb; > > if (serial_logfile != NULL) > { > @@ -249,10 +270,12 @@ serial_fdopen_ops (const int fd, struct serial_ops *ops) > scb->refcnt = 1; > > scb->name = NULL; > + scb->next = scb_base; > scb->debug_p = 0; > scb->async_state = 0; > scb->async_handler = NULL; > scb->async_context = NULL; > + scb_base = scb; > > if ((ops->fdopen) != NULL) > (*ops->fdopen) (scb, fd); > @@ -296,6 +319,18 @@ do_serial_close (struct serial *scb, int really_close) > /* For serial_is_open. */ > scb->bufp = NULL; > > + if (scb_base == scb) > + scb_base = scb_base->next; > + else > + for (tmp_scb = scb_base; tmp_scb; tmp_scb = tmp_scb->next) > + { > + if (tmp_scb->next != scb) > + continue; > + > + tmp_scb->next = tmp_scb->next->next; > + break; > + } > + > serial_unref (scb); > } > > diff --git a/gdb/serial.h b/gdb/serial.h > index 187ed03..b164062 100644 > --- a/gdb/serial.h > +++ b/gdb/serial.h > @@ -249,6 +249,7 @@ struct serial > still need to wait for this many > more seconds. */ > char *name; /* The name of the device or host */ > + struct serial *next; /* Pointer to the next `struct serial *' */ > int debug_p; /* Trace this serial devices operation. */ > int async_state; /* Async internal state. */ > void *async_context; /* Async event thread's context */ OK, I will try your patch and give feedback as soon as possible.