This is the mail archive of the insight@sources.redhat.com mailing list for the Insight project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

FYI: Fix to Steven's 1st core dump is (partially) in the sources


The following fix was applied to the sources.  The other part is a gdb change and
I have submitted it to the gdb list for approval.  As this one is independent it
can go in.  But it only covers some of the scenarios (this was a hairy race
condition that took Steven and I many ours of debugging).


2000-10-13  Fernando Nasser  <fnasser@cygnus.com>

	With Steven Johnson <sbjohnson@ozemail.com.au>
        This change fixes part of the possible scenarios where a race condition
	would cause core dumps if there were commands changing registers or other
	target resources in a startup script.
        The remaining scenarios are fixed by a patch to gdb/ser-unix.c.
	* interface.tcl (gdbtk_update_safe): New function. Like gdbtk_update
	but does nothing if target is running.
	(gdbtk_register_changed): Call the above safe version.
	(gdbtk_memory_changed): Likewise.

-- 
Fernando Nasser
Red Hat - Toronto                       E-Mail:  fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario   M4P 2C9


Index: interface.tcl
===================================================================
RCS file: /cvs/src/src/gdb/gdbtk/library/interface.tcl,v
retrieving revision 1.4
diff -c -p -r1.4 interface.tcl
*** interface.tcl       2000/03/28 01:59:39     1.4
--- interface.tcl       2000/10/13 22:03:39
*************** proc gdbtk_update {} {
*** 145,150 ****
--- 145,171 ----
  }
  
  # ------------------------------------------------------------------
+ #   PROCEDURE:  gdbtk_update_safe - run all update hooks in a safe way
+ #
+ #          Use this procedure to force all widgets to update
+ #          themselves. This hook is usually run after command
+ #          that could change target state.
+ #          Like gdbtk_update but safe to be used in "after idle"
+ #          which is used in update hooks.
+ # ------------------------------------------------------------------
+ proc gdbtk_update_safe {} {
+   global gdb_running
+ 
+   # Fencepost: Do not update if we are running the target
+   # We get here because script commands may have changed memory or
+   # registers and "after idle" events registered as a consequence
+   # If we try to update while the target is running we are doomed.
+   if {!$gdb_running} {
+     gdbtk_update
+   }
+ }
+ 
+ # ------------------------------------------------------------------
  #   PROCEDURE: gdbtk_idle - run all idle hooks
  #
  #          Use this procedure to run all the gdb_idle_hook's,
*************** proc gdbtk_tcl_display {action number {v
*** 548,554 ****
  #         the user has changed the contents of a register.
  # ------------------------------------------------------------------
  proc gdbtk_register_changed {} {
!   after idle gdbtk_update
  }
  
  # ------------------------------------------------------------------
--- 569,575 ----
  #         the user has changed the contents of a register.
  # ------------------------------------------------------------------
  proc gdbtk_register_changed {} {
!   after idle gdbtk_update_safe
  }
  
  # ------------------------------------------------------------------
*************** proc gdbtk_register_changed {} {
*** 558,564 ****
  #         the program's variables).
  # ------------------------------------------------------------------
  proc gdbtk_memory_changed {} {
!   after idle gdbtk_update
  }
  
  ####################################################################
--- 579,585 ----
  #         the program's variables).
  # ------------------------------------------------------------------
  proc gdbtk_memory_changed {} {
!   after idle gdbtk_update_safe
  }
  
  ####################################################################

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]