OSDN Git Service

Skip varobj in running threads.
authorVladimir Prus <vladimir@codesourcery.com>
Sun, 13 Jul 2008 05:31:44 +0000 (05:31 +0000)
committerVladimir Prus <vladimir@codesourcery.com>
Sun, 13 Jul 2008 05:31:44 +0000 (05:31 +0000)
        * mi/mi-cmd-var.c (mi_cmd_var_update): If varobj's
        thread is not stopped, skip the varobj.
        * Makefile.in: Update dependencies.

gdb/ChangeLog
gdb/Makefile.in
gdb/mi/mi-cmd-var.c

index 5e290c7..8f16d1c 100644 (file)
@@ -1,5 +1,12 @@
 2008-07-13  Vladimir Prus  <vladimir@codesourcery.com>
 
+       Skip varobj in running threads.
+        * mi/mi-cmd-var.c (mi_cmd_var_update): If varobj's
+        thread is not stopped, skip the varobj.
+        * Makefile.in: Update dependencies.
+
+2008-07-13  Vladimir Prus  <vladimir@codesourcery.com>
+
        Enable all commands while inferiour is running
         * mi/mi-main.c (mi_cmd_execute): Don't check if
         inferiour is executing.
index 446d967..013d444 100644 (file)
@@ -3256,7 +3256,8 @@ mi-cmd-target.o: $(srcdir)/mi/mi-cmd-target.c $(defs_h) $(mi_cmds_h) \
        $(mi_getopt_h) $(remote_h)
        $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-target.c
 mi-cmd-var.o: $(srcdir)/mi/mi-cmd-var.c $(defs_h) $(mi_cmds_h) $(ui_out_h) \
-       $(mi_out_h) $(varobj_h) $(value_h) $(gdb_string_h) $(mi_getopt_h)
+       $(mi_out_h) $(varobj_h) $(value_h) $(gdb_string_h) $(mi_getopt_h) \
+       $(gdbthread_h)
        $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-var.c
 mi-console.o: $(srcdir)/mi/mi-console.c $(defs_h) $(mi_console_h) \
        $(gdb_string_h)
index 0adcf1f..53c95da 100644 (file)
@@ -29,6 +29,7 @@
 #include <ctype.h>
 #include "gdb_string.h"
 #include "mi-getopt.h"
+#include "gdbthread.h"
 
 const char mi_no_values[] = "--no-values";
 const char mi_simple_values[] = "--simple-values";
@@ -610,8 +611,21 @@ mi_cmd_var_update (char *command, char **argv, int argc)
       cr = rootlist;
       while (*cr != NULL)
        {
-         if (*name == '*' || varobj_floating_p (*cr))
-           varobj_update_one (*cr, print_values, 0 /* implicit */);
+         int thread_id = varobj_get_thread_id (*cr);
+         int thread_stopped = 0;
+         if (thread_id == -1 && is_stopped (inferior_ptid))
+           thread_stopped = 1;
+         else
+           {         
+             struct thread_info *tp = find_thread_id (thread_id);
+             if (tp)
+               thread_stopped = is_stopped (tp->ptid);
+             else
+               thread_stopped = 1;
+           }
+         if (thread_stopped)
+           if (*name == '*' || varobj_floating_p (*cr))
+             varobj_update_one (*cr, print_values, 0 /* implicit */);
          cr++;
        }
       do_cleanups (cleanup);