diff options
author | Keith Seitz <keiths@cygnus> | 1998-05-24 21:05:12 +0000 |
---|---|---|
committer | Keith Seitz <keiths@cygnus> | 1998-05-24 21:05:12 +0000 |
commit | 21b3bc779ca64a3b1d39886a74f0304c8dc96368 (patch) | |
tree | 9787fccc250279c4770c3406e0bad5a3d6f83ab0 /gdb | |
parent | aa81c3ca9905bce9ae34908f82cc81961227a512 (diff) | |
download | gdb-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-gdbtk | 14 | ||||
-rw-r--r-- | gdb/gdbtk.c | 13 | ||||
-rw-r--r-- | gdb/ser-unix.c | 29 | ||||
-rw-r--r-- | gdb/top.c | 3 |
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; } @@ -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. */ |