This is the mail archive of the
frysk-cvs@sources.redhat.com
mailing list for the frysk project.
[SCM] frysk system monitor/debugger branch, master, updated. 58677c3da1a72166a3aa8a2a2a14a4ffca765b5c
- From: moore at sourceware dot org
- To: frysk-cvs at sourceware dot org
- Date: 7 Nov 2007 10:51:10 -0000
- Subject: [SCM] frysk system monitor/debugger branch, master, updated. 58677c3da1a72166a3aa8a2a2a14a4ffca765b5c
- Reply-to: frysk at sourceware dot org
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