From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2382 invoked by alias); 24 Mar 2009 01:44:08 -0000 Received: (qmail 2059 invoked by uid 22791); 24 Mar 2009 01:44:07 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from rock.gnat.com (HELO rock.gnat.com) (205.232.38.15) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 24 Mar 2009 01:44:00 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 49EEA2BAB88 for ; Mon, 23 Mar 2009 21:43:58 -0400 (EDT) Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id TuRDQdYv0w9q for ; Mon, 23 Mar 2009 21:43:58 -0400 (EDT) Received: from joel.gnat.com (localhost.localdomain [127.0.0.1]) by rock.gnat.com (Postfix) with ESMTP id 0847B2BAB41 for ; Mon, 23 Mar 2009 21:43:58 -0400 (EDT) Received: by joel.gnat.com (Postfix, from userid 1000) id 5CC2B5BD21; Mon, 23 Mar 2009 18:43:53 -0700 (PDT) Date: Tue, 24 Mar 2009 02:22:00 -0000 From: Joel Brobecker To: gdb-patches@sourceware.org Subject: Re: [RFA] New gdb_usleep function? Message-ID: <20090324014353.GP9472@adacore.com> References: <20090317161240.GB31959@adacore.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="lrZ03NoBR/3+SXJZ" Content-Disposition: inline In-Reply-To: <20090317161240.GB31959@adacore.com> User-Agent: Mutt/1.5.18 (2008-05-17) 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: 2009-03/txt/msg00518.txt.bz2 --lrZ03NoBR/3+SXJZ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 1007 > 2009-03-17 Joel Brobecker > > Add gdb_usleep as a portable version of sleep based on gdb_select. > > * gdb_usleep.h, gdb_usleep.c: New files. > * Makefile.in (SFILES): Add gdb_usleep.c. > (HFILES_NO_SRCDIR): Add gdb_usleep.h. > (COMMON_OBS): Add gdb_usleep.o. > * ser-unix.c (hardwire_send_break): Replace call to gdb_select > by call to gdb_usleep. There were no objections, so here is what I ended up checking in. There is one thing worth mentioning apart from the addition of the missing #include of "gdb_usleep.h" from gdb_usleep.c that was caught by Jan: I needed to add a #include of to get access to struct timeval. I think it was on Tru64, IIRC. The thing is, we normally conditionalize the inclusion of system files like these using #ifdef HAVE_SYS_TIME_H, but so far, we don't for . See event-loop.c for instance. So I simply included it without checking its availability. -- Joel --lrZ03NoBR/3+SXJZ Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="gdb_usleep.diff" Content-length: 4558 diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 8e19265..95b95a1 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -666,7 +666,7 @@ SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \ valarith.c valops.c valprint.c value.c varobj.c vec.c \ wrapper.c \ xml-tdesc.c xml-support.c \ - inferior.c + inferior.c gdb_usleep.c LINTFILES = $(SFILES) $(YYFILES) $(CONFIG_SRCS) init.c @@ -736,7 +736,8 @@ config/sparc/nm-sol2.h config/nm-linux.h config/mips/nm-irix5.h \ config/rs6000/nm-rs6000.h top.h bsd-kvm.h gdb-stabs.h reggroups.h \ annotate.h sim-regno.h dictionary.h dfp.h main.h frame-unwind.h \ remote-fileio.h i386-linux-tdep.h vax-tdep.h objc-lang.h \ -sentinel-frame.h bcache.h symfile.h windows-tdep.h linux-tdep.h +sentinel-frame.h bcache.h symfile.h windows-tdep.h linux-tdep.h \ +gdb_usleep.h # Header files that already have srcdir in them, or which are in objdir. @@ -817,7 +818,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \ solib.o solib-null.o \ prologue-value.o memory-map.o xml-support.o \ target-descriptions.o target-memory.o xml-tdesc.o xml-builtin.o \ - inferior.o osdata.o + inferior.o osdata.o gdb_usleep.o TSOBS = inflow.o diff --git a/gdb/gdb_usleep.c b/gdb/gdb_usleep.c new file mode 100644 index 0000000..dd6d460 --- /dev/null +++ b/gdb/gdb_usleep.c @@ -0,0 +1,41 @@ +/* Copyright (C) 2009 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "defs.h" +#include "gdb_usleep.h" +#include "gdb_select.h" +#include "gdb_usleep.h" + +#include + +int +gdb_usleep (int usec) +{ + struct timeval delay; + int retval; + + delay.tv_sec = usec / 1000000; + delay.tv_usec = usec % 1000000; + retval = gdb_select (0, 0, 0, 0, &delay); + + if (retval < 0) + retval = -1; + else + retval = 0; + + return retval; +} diff --git a/gdb/gdb_usleep.h b/gdb/gdb_usleep.h new file mode 100644 index 0000000..444ffbd --- /dev/null +++ b/gdb/gdb_usleep.h @@ -0,0 +1,30 @@ +/* Copyright (C) 2009 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#if !defined(GDB_USLEEP_H) +#define GDB_USLEEP_H + +/* Suspend execution for USEC microseconds. + + Limitation: If a signal is raised during the delay, gdb_usleep + might return earlier than requested. + + It returns 0 on success or -1 on error. */ +extern int gdb_usleep (int usect); + +#endif /* !defined(GDB_USLEEP_H) */ + diff --git a/gdb/ser-unix.c b/gdb/ser-unix.c index 07abf2b..ea2938d 100644 --- a/gdb/ser-unix.c +++ b/gdb/ser-unix.c @@ -368,16 +368,13 @@ hardwire_send_break (struct serial *scb) #ifdef HAVE_SGTTY { int status; - struct timeval timeout; status = ioctl (scb->fd, TIOCSBRK, 0); /* Can't use usleep; it doesn't exist in BSD 4.2. */ - /* Note that if this select() is interrupted by a signal it will not wait - the full length of time. I think that is OK. */ - timeout.tv_sec = 0; - timeout.tv_usec = 250000; - gdb_select (0, 0, 0, 0, &timeout); + /* Note that if this gdb_select() is interrupted by a signal it will not + wait the full length of time. I think that is OK. */ + gdb_usleep (250000); status = ioctl (scb->fd, TIOCCBRK, 0); return status; } --lrZ03NoBR/3+SXJZ--