* 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:
parent
84c6c83cbc
commit
cf30a8e15b
6 changed files with 50 additions and 14 deletions
|
@ -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
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|
|
@ -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");
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue