aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorKeith Seitz <keiths@cygnus>1998-05-24 21:05:12 +0000
committerKeith Seitz <keiths@cygnus>1998-05-24 21:05:12 +0000
commit21b3bc779ca64a3b1d39886a74f0304c8dc96368 (patch)
tree9787fccc250279c4770c3406e0bad5a3d6f83ab0 /gdb
parentaa81c3ca9905bce9ae34908f82cc81961227a512 (diff)
downloadgdb-21b3bc779ca64a3b1d39886a74f0304c8dc96368.zip
gdb-21b3bc779ca64a3b1d39886a74f0304c8dc96368.tar.gz
gdb-21b3bc779ca64a3b1d39886a74f0304c8dc96368.tar.bz2
* ser-unix.c (wait_for): Do not reset timeout_remaining for cygwin32 so
that we can use this member to track real timeouts. (hardwire_readchar): Modify for cygwin32 so that we only ever use a real system timeout of one second. Track the "real" timeout as a series of th ese one second timeouts. Call ui_loop_hook to keep the gui alive. * top.c: Define new hook for cygwin32, "ui_loop_hook". * gdbtk.c (gdbtk_init): Add ui_loop_hook for CygWin32 to work around update problems.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog-gdbtk14
-rw-r--r--gdb/gdbtk.c13
-rw-r--r--gdb/ser-unix.c29
-rw-r--r--gdb/top.c3
4 files changed, 56 insertions, 3 deletions
diff --git a/gdb/ChangeLog-gdbtk b/gdb/ChangeLog-gdbtk
index 1113816..0833e54 100644
--- a/gdb/ChangeLog-gdbtk
+++ b/gdb/ChangeLog-gdbtk
@@ -1,3 +1,17 @@
+Sun May 24 14:00:24 1998 Keith Seitz <keiths@cygnus.com>
+
+ * ser-unix.c (wait_for): Do not reset timeout_remaining for cygwin32 so that
+ we can use this member to track real timeouts.
+ (hardwire_readchar): Modify for cygwin32 so that we only ever use a real
+ system timeout of one second. Track the "real" timeout as a series of these
+ one second timeouts.
+ Call ui_loop_hook to keep the gui alive.
+
+ * top.c: Define new hook for cygwin32, "ui_loop_hook".
+
+ * gdbtk.c (gdbtk_init): Add ui_loop_hook for CygWin32 to work around
+ update problems.
+
Thu May 21 13:56:24 1998 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
* gdbtk.c: reinserted the changes that were accidentally deleted:
diff --git a/gdb/gdbtk.c b/gdb/gdbtk.c
index 6027cdb..4ca7a63 100644
--- a/gdb/gdbtk.c
+++ b/gdb/gdbtk.c
@@ -91,6 +91,10 @@ int (*ui_load_progress_hook) PARAMS ((char *, unsigned long));
void (*pre_add_symbol_hook) PARAMS ((char *));
void (*post_add_symbol_hook) PARAMS ((void));
+#ifdef __CYGWIN32__
+extern void (*ui_loop_hook) PARAMS ((int));
+#endif
+
char * get_prompt PARAMS ((void));
static void null_routine PARAMS ((int));
@@ -1895,6 +1899,12 @@ x_event (signo)
in_x_event = 1;
+#ifdef __CYGWIN32__
+ if (signo == -2)
+ if (gdbtk_timer_going)
+ gdbtk_stop_timer ();
+#endif
+
/* Process pending events */
while (Tcl_DoOneEvent (TCL_DONT_WAIT|TCL_ALL_EVENTS) != 0)
;
@@ -2305,6 +2315,9 @@ gdbtk_init ( argv0 )
readline_hook = gdbtk_readline;
readline_end_hook = gdbtk_readline_end;
ui_load_progress_hook = gdbtk_load_hash;
+#ifdef __CYGWIN32__
+ ui_loop_hook = x_event;
+#endif
pre_add_symbol_hook = gdbtk_pre_add_symbol;
post_add_symbol_hook = gdbtk_post_add_symbol;
create_tracepoint_hook = gdbtk_create_tracepoint;
diff --git a/gdb/ser-unix.c b/gdb/ser-unix.c
index c365434..81374ea 100644
--- a/gdb/ser-unix.c
+++ b/gdb/ser-unix.c
@@ -83,6 +83,10 @@ static int hardwire_flush_input PARAMS ((serial_t));
static int hardwire_send_break PARAMS ((serial_t));
static int hardwire_setstopbits PARAMS ((serial_t, int));
+#ifdef __CYGWIN32__
+extern void ui_loop_hook PARAMS ((int));
+#endif
+
/* Open up a real live device for serial I/O */
static int
@@ -430,7 +434,9 @@ wait_for(scb, timeout)
serial_t scb;
int timeout;
{
+#ifndef __CYGWIN32__
scb->timeout_remaining = 0;
+#endif
#ifdef HAVE_SGTTY
{
@@ -539,21 +545,34 @@ wait_for(scb, timeout)
to wait, or -1 to wait forever. Use timeout of 0 to effect a poll. Returns
char if successful. Returns SERIAL_TIMEOUT if timeout expired, EOF if line
dropped dead, or SERIAL_ERROR for any other error (see errno in that case). */
-
static int
hardwire_readchar(scb, timeout)
serial_t scb;
int timeout;
{
- int status;
+ int status, t;
if (scb->bufcnt-- > 0)
return *scb->bufp++;
+#ifdef __CYGWIN32__
+ if (timeout > 0)
+ timeout++;
+#endif
+
while (1)
{
+#ifdef __CYGWIN32__
+ t = timeout == 0 ? 0 : 1;
+ scb->timeout_remaining = timeout < 0 ? timeout : timeout - t;
+ status = wait_for (scb, t);
+
+ /* -2 means disable timer */
+ if (ui_loop_hook)
+ ui_loop_hook (-2);
+#else
status = wait_for (scb, timeout);
-
+#endif
if (status < 0)
return status;
@@ -570,6 +589,10 @@ hardwire_readchar(scb, timeout)
timeout = scb->timeout_remaining;
continue;
}
+#ifdef __CYGWIN32__
+ else if (scb->timeout_remaining < 0)
+ continue;
+#endif
else
return SERIAL_TIMEOUT;
}
diff --git a/gdb/top.c b/gdb/top.c
index 248a44d..b9d759b 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -379,6 +379,9 @@ static void stop_sig PARAMS ((int));
command file. */
void (*init_ui_hook) PARAMS ((char *argv0));
+#ifdef __CYGWIN32__
+void (*ui_loop_hook) PARAMS ((int));
+#endif
/* Called instead of command_loop at top level. Can be invoked via
return_to_top_level. */