* gdbserver/remote-utils.c (remote_open): Set gdbserver as "owner"

of SIGIO.
(input_interrupt): Don't block on read, in case we got redundant
SIGIO.  Don't gripe about redundant SIGIO.
* gdbserver/low-hppabsd.c (mywait): Use waitpid().  Enable SIGIO
handler while waiting.
* gdbserver/low-linux.c (mywait): Likewise.
* gdbserver/low-nbsd.c (mywait): Likewise.
* gdbserver/low-sparc.c (mywait): Likewise.
This commit is contained in:
J.T. Conklin 2001-07-11 17:33:24 +00:00
parent 84c6c83cbc
commit cf30a8e15b
6 changed files with 50 additions and 14 deletions

View File

@ -1,3 +1,15 @@
2001-07-11 Greg McGary <greg@mcgary.org>
* gdbserver/remote-utils.c (remote_open): Set gdbserver as "owner"
of SIGIO.
(input_interrupt): Don't block on read, in case we got redundant
SIGIO. Don't gripe about redundant SIGIO.
* gdbserver/low-hppabsd.c (mywait): Use waitpid(). Enable SIGIO
handler while waiting.
* gdbserver/low-linux.c (mywait): Likewise.
* gdbserver/low-nbsd.c (mywait): Likewise.
* gdbserver/low-sparc.c (mywait): Likewise.
2001-07-11 Keith Seitz <keiths@redhat.com>
* infrun.c (print_stop_reason): Add missing uiout field

View File

@ -96,7 +96,9 @@ mywait (char *status)
int pid;
union wait w;
pid = wait (&w);
enable_async_io ();
pid = waitpid (inferior_pid, &w, 0);
disable_async_io ();
if (pid != inferior_pid)
perror_with_name ("wait");

View File

@ -105,7 +105,9 @@ mywait (char *status)
int pid;
union wait w;
pid = wait (&w);
enable_async_io ();
pid = waitpid (inferior_pid, &w, 0);
disable_async_io ();
if (pid != inferior_pid)
perror_with_name ("wait");

View File

@ -172,7 +172,9 @@ mywait (char *status)
int pid;
int w;
pid = wait (&w);
enable_async_io ();
pid = waitpid (inferior_pid, &w, 0);
disable_async_io ();
if (pid != inferior_pid)
perror_with_name ("wait");

View File

@ -102,7 +102,9 @@ mywait (char *status)
int pid;
union wait w;
pid = wait (&w);
enable_async_io ();
pid = waitpid (inferior_pid, &w, 0);
disable_async_io ();
if (pid != inferior_pid)
perror_with_name ("wait");

View File

@ -1,5 +1,5 @@
/* Remote utility routines for the remote server for GDB.
Copyright 1986, 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
Copyright 1986, 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
Free Software Foundation, Inc.
This file is part of GDB.
@ -32,6 +32,8 @@
#include <sys/ioctl.h>
#include <signal.h>
#include <fcntl.h>
#include <sys/time.h>
#include <unistd.h>
int remote_debug = 0;
struct ui_file *gdb_stdlog;
@ -156,8 +158,11 @@ remote_open (char *name)
#if defined(F_SETFL) && defined (FASYNC)
save_fcntl_flags = fcntl (remote_desc, F_GETFL, 0);
fcntl (remote_desc, F_SETFL, save_fcntl_flags | FASYNC);
#endif
#if defined (F_SETOWN)
fcntl (remote_desc, F_SETOWN, getpid ());
#endif
disable_async_io ();
#endif /* FASYNC */
fprintf (stderr, "Remote debugging using %s\n", name);
}
@ -261,18 +266,29 @@ putpkt (char *buf)
static void
input_interrupt (void)
{
int cc;
char c;
fd_set readset;
struct timeval immediate = { 0, 0 };
cc = read (remote_desc, &c, 1);
/* Protect against spurious interrupts. This has been observed to
be a problem under NetBSD 1.4 and 1.5. */
if (cc != 1 || c != '\003')
FD_ZERO (&readset);
FD_SET (remote_desc, &readset);
if (select (remote_desc + 1, &readset, 0, 0, &immediate) > 0)
{
fprintf (stderr, "input_interrupt, cc = %d c = %d\n", cc, c);
return;
}
int cc;
char c;
cc = read (remote_desc, &c, 1);
kill (inferior_pid, SIGINT);
if (cc != 1 || c != '\003')
{
fprintf (stderr, "input_interrupt, cc = %d c = %d\n", cc, c);
return;
}
kill (inferior_pid, SIGINT);
}
}
void