[commit] Don't allow more than one LWP to have `do_step' flag set at a time

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[commit] Don't allow more than one LWP to have `do_step' flag set at a time

Kevin Buettner
I've just committed the patch below.  As indicated by the comment, the
software singlestep code internal to RDA does not expect to step more
than one thread at a time.  (It's rather naive about how it saves the
singlestep breakpoints.)  I considered making it more robust, it seems
to me that GDB only expects one thread to be singlestepped at a time.
At the present time, I don't think there's any functionality to be gained
by allowing more than one thread to singlestep simultaneously.

        * lwp-pool.c (clear_all_do_step_flags): New function.
        (lwp_pool_singlestep_lwp): Use it.

Index: lwp-pool.c
===================================================================
RCS file: /cvs/src/src/rda/unix/lwp-pool.c,v
retrieving revision 1.5
diff -u -p -r1.5 lwp-pool.c
--- lwp-pool.c 10 Nov 2005 21:32:15 -0000 1.5
+++ lwp-pool.c 11 Nov 2005 20:26:23 -0000
@@ -1395,6 +1395,23 @@ lwp_pool_continue_lwp (struct gdbserv *s
 }
 
 
+/* Clear the `do_step' flags for all LWPs in the hash table.  */
+
+static void
+clear_all_do_step_flags (void)
+{
+  int i;
+
+  for (i = 0; i < hash_size; i++)
+    {
+      struct lwp *l = hash[i];
+
+      if (l)
+ l->do_step = 0;
+    }
+}
+
+
 int
 lwp_pool_singlestep_lwp (struct gdbserv *serv, pid_t lwp, int signal)
 {
@@ -1406,6 +1423,12 @@ lwp_pool_singlestep_lwp (struct gdbserv
     fprintf (stderr, "lwp_pool_singlestep_lwp (%p, %d, %d)\n",
      serv, (int) lwp, signal);
 
+  /* Neither GDB nor the software singlestep code contained in RDA
+     expect more than one LWP to be stepped simultaneously.  Clear the
+     `do_step' flag in all LWPs.  The flag for the LWP that we're about
+     to step will be set later on.  */
+  clear_all_do_step_flags ();
+
   switch (l->state)
     {
     case lwp_state_uninitialized: