* thread.c (thread_apply_all_command): Save the command before executing it
authorChristopher Faylor <me+cygwin@cgf.cx>
Fri, 17 Nov 2000 03:49:41 +0000 (03:49 +0000)
committerChristopher Faylor <me+cygwin@cgf.cx>
Fri, 17 Nov 2000 03:49:41 +0000 (03:49 +0000)
because it may be modified.  Restore the saved command so that the same command
is executed on next thread.
(thread_apply_command): Same correction.

gdb/ChangeLog
gdb/thread.c

index 8507debe8c808888c8a16819308111b1da5db579..8df4bd4e4ff5d2e2fa0e7b08acb235945cd7eb5d 100644 (file)
@@ -1,3 +1,10 @@
+2000-11-16  Christopher Faylor  <cgf@redhat.com>
+
+       * thread.c (thread_apply_all_command): Save the command before
+       executing it because it may be modified.  Restore the saved command so
+       that the same command is executed on next thread.
+       (thread_apply_command): Same correction.
+
 2000-11-16  Michael Snyder  <msnyder@cleaver.cygnus.com>
 
        * regcache.c (read_register_bytes): Failing to set register_valid
index 94f0b3f37915d0455c8b14643b72f4ff40791467..7f509765b9c223121e12e9099e793580ddc6a29b 100644 (file)
@@ -517,6 +517,8 @@ thread_apply_all_command (char *cmd, int from_tty)
 {
   struct thread_info *tp;
   struct cleanup *old_chain;
+  struct cleanup *saved_cmd_cleanup_chain;
+  char *saved_cmd;
 
   if (cmd == NULL || *cmd == '\000')
     error ("Please specify a command following the thread ID list");
@@ -527,6 +529,10 @@ thread_apply_all_command (char *cmd, int from_tty)
      traversing it for "thread apply all".  MVS */
   target_find_new_threads ();
 
+  /* Save a copy of the command in case it is clobbered by
+     execute_command */
+  saved_cmd = strdup (cmd);
+  saved_cmd_cleanup_chain = make_cleanup (free, (void *) saved_cmd);
   for (tp = thread_list; tp; tp = tp->next)
     if (thread_alive (tp))
       {
@@ -540,8 +546,10 @@ thread_apply_all_command (char *cmd, int from_tty)
                         target_pid_to_str (inferior_pid));
 #endif
        execute_command (cmd, from_tty);
+       strcpy (cmd, saved_cmd); /* Restore exact command used previously */
       }
 
+  do_cleanups (saved_cmd_cleanup_chain);
   do_cleanups (old_chain);
 }
 
@@ -551,6 +559,8 @@ thread_apply_command (char *tidlist, int from_tty)
   char *cmd;
   char *p;
   struct cleanup *old_chain;
+  struct cleanup *saved_cmd_cleanup_chain;
+  char *saved_cmd;
 
   if (tidlist == NULL || *tidlist == '\000')
     error ("Please specify a thread ID list");
@@ -562,6 +572,10 @@ thread_apply_command (char *tidlist, int from_tty)
 
   old_chain = make_cleanup_restore_current_thread (inferior_pid);
 
+  /* Save a copy of the command in case it is clobbered by
+     execute_command */
+  saved_cmd = strdup (cmd);
+  saved_cmd_cleanup_chain = make_cleanup (free, (void *) saved_cmd);
   while (tidlist < cmd)
     {
       struct thread_info *tp;
@@ -608,10 +622,12 @@ thread_apply_command (char *tidlist, int from_tty)
                               target_pid_to_str (inferior_pid));
 #endif
              execute_command (cmd, from_tty);
+             strcpy (cmd, saved_cmd);  /* Restore exact command used previously */
            }
        }
     }
 
+  do_cleanups (saved_cmd_cleanup_chain);
   do_cleanups (old_chain);
 }