* linux-low.c (linux_wait): Unblock async I/O.
authorDaniel Jacobowitz <drow@false.org>
Sun, 29 Feb 2004 16:47:15 +0000 (16:47 +0000)
committerDaniel Jacobowitz <drow@false.org>
Sun, 29 Feb 2004 16:47:15 +0000 (16:47 +0000)
(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.

gdb/gdbserver/ChangeLog
gdb/gdbserver/linux-low.c
gdb/gdbserver/remote-utils.c
gdb/gdbserver/server.h

index ae1117f3a68933942efd4dd5d80291a18dbb151e..5066aafdd9233b150d27caa10d2ff99fef0a04d6 100644 (file)
@@ -1,3 +1,10 @@
+2004-02-29  Daniel Jacobowitz  <drow@mvista.com>
+
+       * 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  <drow@mvista.com>
 
        * remote-utils.c (remote_open): Print a status notice after
index 90efd01ebeb78c897b5ad6f0878393fa4a8a5daa..ea155160e366ab7a5e4e33730f35a4988c227016 100644 (file)
@@ -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
index c9d198fb289e2ce70a8f86503e188f49d09ea9d1..cd8c3c56cbdce03bce7c615b5502a31a1fca84a3 100644 (file)
@@ -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)
 {
index 5212deb2c4a077183ddcb727d03f395b5cabc9fb..4896afb5856bff7e7205ca3826e90703018a1024 100644 (file)
@@ -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);