[SCM] frysk system monitor/debugger branch, master, updated. 58677c3da1a72166a3aa8a2a2a14a4ffca765b5c

moore@sourceware.org moore@sourceware.org
Wed Nov 7 10:51:00 GMT 2007


The branch, master has been updated
       via  58677c3da1a72166a3aa8a2a2a14a4ffca765b5c (commit)
      from  b0fe6a24f1b83254fd0a74c4fad2e72a46b49b26 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit 58677c3da1a72166a3aa8a2a2a14a4ffca765b5c
Author: Tim Moore <moore@blackbox.bricoworks.com>
Date:   Tue Nov 6 18:33:43 2007 +0100

    Fix errors from breakpoints when rerunning a program
    
    frysk-core/frysk/rt/ChangeLog:
    2007-11-06  Tim Moore  <timoore@redhat.com>
    
    	* BreakpointManager.java (refreshBreakpoints): Enable breakpoint
    	even if it has no state.
    
    frysk-core/frysk/stepping/ChangeLog
    2007-11-06  Tim Moore  <timoore@redhat.com>
    
    	* SteppingEngine.java (ThreadLifeObservable.updateTerminated):
    	Clean out the dead task and its siblings if necessary.

-----------------------------------------------------------------------

Summary of changes:
 frysk-core/frysk/rt/BreakpointManager.java    |    2 +-
 frysk-core/frysk/rt/ChangeLog                 |    5 ++
 frysk-core/frysk/stepping/ChangeLog           |    5 ++
 frysk-core/frysk/stepping/SteppingEngine.java |   53 +++++++++++++++++-------
 4 files changed, 48 insertions(+), 17 deletions(-)

First 500 lines of diff:
diff --git a/frysk-core/frysk/rt/BreakpointManager.java b/frysk-core/frysk/rt/BreakpointManager.java
index 9ebbd99..d1737d8 100644
--- a/frysk-core/frysk/rt/BreakpointManager.java
+++ b/frysk-core/frysk/rt/BreakpointManager.java
@@ -220,7 +220,7 @@ public class BreakpointManager
         while (iter.hasNext()) {
             SourceBreakpoint bpt = (SourceBreakpoint)iter.next();
             SourceBreakpoint.State state = bpt.getState(task);
-            if (state == SourceBreakpoint.DEFERRED) {
+            if (state == SourceBreakpoint.DEFERRED || state == null) {
                 enableBreakpoint(bpt, task);
             }
         }
diff --git a/frysk-core/frysk/rt/ChangeLog b/frysk-core/frysk/rt/ChangeLog
index 82243e7..f1f42ec 100644
--- a/frysk-core/frysk/rt/ChangeLog
+++ b/frysk-core/frysk/rt/ChangeLog
@@ -1,3 +1,8 @@
+2007-11-06  Tim Moore  <timoore@redhat.com>
+    
+    	* BreakpointManager.java (refreshBreakpoints): Enable breakpoint
+    	even if it has no state.
+
 2007-10-26  Andrew Cagney  <cagney@redhat.com>
 
 	* DisplayValue.java: No need to catch catch ParseException.
diff --git a/frysk-core/frysk/stepping/ChangeLog b/frysk-core/frysk/stepping/ChangeLog
index b5a6454..f643eb3 100644
--- a/frysk-core/frysk/stepping/ChangeLog
+++ b/frysk-core/frysk/stepping/ChangeLog
@@ -1,3 +1,8 @@
+2007-11-06  Tim Moore  <timoore@redhat.com>
+    
+    	* SteppingEngine.java (ThreadLifeObservable.updateTerminated):
+    	Clean out the dead task and its siblings if necessary.
+
 2007-10-14  Andrew Cagney  <cagney@redhat.com>
 
 	* TestSteppingEngine.java (testInstructionNext()): Call
diff --git a/frysk-core/frysk/stepping/SteppingEngine.java b/frysk-core/frysk/stepping/SteppingEngine.java
index 8240dc5..bfadb9a 100644
--- a/frysk-core/frysk/stepping/SteppingEngine.java
+++ b/frysk-core/frysk/stepping/SteppingEngine.java
@@ -1166,24 +1166,45 @@ public class SteppingEngine {
 
 	    /* Watch for terminating Tasks. Set the stepping state of the task
 	     * as terminated and notify the observers of the event. */
-
-	    Integer context = (Integer) SteppingEngine.this.contextMap.get(task
-		    .getProc());
-	    SteppingEngine.this.contextMap.put(task.getProc(), new Integer(
+            Proc proc = task.getProc();
+	    Integer context = (Integer)SteppingEngine.this.contextMap.get(proc);
+	    SteppingEngine.this.contextMap.put(proc, new Integer(
 		    context.intValue() - 1));
 
-	    TaskStepEngine tse = (TaskStepEngine) SteppingEngine.this.taskStateMap
-		    .get(task);
-	    tse.setState(new StepTerminatedState(task));
-
-	    if (signal)
-		tse.setMessage(tse.getMessage() + "Task " + task.getTid()
-			+ " terminated from signal " + value);
-	    else
-		tse.setMessage(tse.getMessage() + "Task " + task.getTid() + " terminated");
-
-	    steppingObserver.notifyNotBlocked(tse);
-
+            TaskStepEngine tse
+                = (TaskStepEngine)SteppingEngine.this.taskStateMap
+                .get(task);
+            // Must have missed the terminating event
+            if (tse.isAlive()) {
+                tse.setState(new StepTerminatedState(task));
+
+                if (signal)
+                    tse.setMessage(tse.getMessage() + "Task "
+                                   + task.getTid()
+                                   + " terminated from signal "
+                                   + value);
+                else
+                    tse.setMessage(tse.getMessage() + "Task "
+                                   + task.getTid() + " terminated");
+                steppingObserver.notifyNotBlocked(tse);
+            }
+            // Clone task list so we can remove tasks (via cleanTask)
+            // without messing up the iterator.
+            Iterator taskIter
+                = ((LinkedList)SteppingEngine.this.threadsList.clone())
+                .iterator();
+            // Only one terminated event might be received by the
+            // process, so process all the tasks now.
+            while (taskIter.hasNext()) {
+                Task sibling = (Task)taskIter.next();
+                if (sibling.getProc() == proc) {
+                    TaskStepEngine siblingTse
+                        = (TaskStepEngine)SteppingEngine.this.taskStateMap
+                        .get(sibling);
+                    if (!siblingTse.isAlive())
+                        cleanTask(sibling);
+                }
+            }
 	    return Action.CONTINUE;
 	}
 


hooks/post-receive
--
frysk system monitor/debugger



More information about the Frysk-cvs mailing list