public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
From: moore@sourceware.org
To: frysk-cvs@sourceware.org
Subject: [SCM] frysk system monitor/debugger branch, master, updated. 58677c3da1a72166a3aa8a2a2a14a4ffca765b5c
Date: Wed, 07 Nov 2007 10:51:00 -0000	[thread overview]
Message-ID: <20071107105110.3497.qmail@sourceware.org> (raw)

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


                 reply	other threads:[~2007-11-07 10:51 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20071107105110.3497.qmail@sourceware.org \
    --to=moore@sourceware.org \
    --cc=frysk-cvs@sourceware.org \
    --cc=frysk@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).