From: Daniel Jacobowitz Date: Sun, 29 Feb 2004 16:47:15 +0000 (+0000) Subject: * linux-low.c (linux_wait): Unblock async I/O. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=62ea82f508b97190fce6018ef3545dff79de43cb;p=binutils-gdb.git * linux-low.c (linux_wait): Unblock async I/O. (linux_resume): Block and enable async I/O. * remote-utils.c (block_async_io, unblock_async_io): New functions. * server.h (block_async_io, unblock_async_io): Add prototypes. --- diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index ae1117f3a68..5066aafdd92 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,10 @@ +2004-02-29 Daniel Jacobowitz + + * linux-low.c (linux_wait): Unblock async I/O. + (linux_resume): Block and enable async I/O. + * remote-utils.c (block_async_io, unblock_async_io): New functions. + * server.h (block_async_io, unblock_async_io): Add prototypes. + 2004-02-29 Daniel Jacobowitz * remote-utils.c (remote_open): Print a status notice after diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c index 90efd01ebeb..ea155160e36 100644 --- a/gdb/gdbserver/linux-low.c +++ b/gdb/gdbserver/linux-low.c @@ -662,6 +662,7 @@ retry: } enable_async_io (); + unblock_async_io (); w = linux_wait_for_event (child); stop_all_processes (); disable_async_io (); @@ -1017,7 +1018,11 @@ linux_resume (struct thread_resume *resume_info) if (pending_flag) for_each_inferior (&all_threads, linux_queue_one_thread); else - for_each_inferior (&all_threads, linux_continue_one_thread); + { + block_async_io (); + enable_async_io (); + for_each_inferior (&all_threads, linux_continue_one_thread); + } } #ifdef HAVE_LINUX_USRREGS diff --git a/gdb/gdbserver/remote-utils.c b/gdb/gdbserver/remote-utils.c index c9d198fb289..cd8c3c56cbd 100644 --- a/gdb/gdbserver/remote-utils.c +++ b/gdb/gdbserver/remote-utils.c @@ -367,6 +367,24 @@ input_interrupt (int unused) } } +void +block_async_io (void) +{ + sigset_t sigio_set; + sigemptyset (&sigio_set); + sigaddset (&sigio_set, SIGIO); + sigprocmask (SIG_BLOCK, &sigio_set, NULL); +} + +void +unblock_async_io (void) +{ + sigset_t sigio_set; + sigemptyset (&sigio_set); + sigaddset (&sigio_set, SIGIO); + sigprocmask (SIG_UNBLOCK, &sigio_set, NULL); +} + void enable_async_io (void) { diff --git a/gdb/gdbserver/server.h b/gdb/gdbserver/server.h index 5212deb2c4a..4896afb5856 100644 --- a/gdb/gdbserver/server.h +++ b/gdb/gdbserver/server.h @@ -134,6 +134,8 @@ void write_ok (char *buf); void write_enn (char *buf); void enable_async_io (void); void disable_async_io (void); +void unblock_async_io (void); +void block_async_io (void); void convert_ascii_to_int (char *from, char *to, int n); void convert_int_to_ascii (char *from, char *to, int n); void new_thread_notify (int id);