public inbox for frysk-cvs@sourceware.org
help / color / mirror / Atom feed
* [SCM] master: Maintain a task list indexed by ProcessIdentifier.
@ 2008-02-07 20:47 cagney
0 siblings, 0 replies; only message in thread
From: cagney @ 2008-02-07 20:47 UTC (permalink / raw)
To: frysk-cvs
The branch, master has been updated
via d54209223897ff92941df463fb87059a1e6afbf4 (commit)
from eac0c5123c615be6efa3ca1738175ea0a59be132 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email.
- Log -----------------------------------------------------------------
commit d54209223897ff92941df463fb87059a1e6afbf4
Author: Andrew Cagney <cagney@redhat.com>
Date: Thu Feb 7 15:46:54 2008 -0500
Maintain a task list indexed by ProcessIdentifier.
frysk-core/frysk/proc/live/ChangeLog
2008-02-07 Andrew Cagney <cagney@redhat.com>
* LinuxPtraceHost.java (getTask(ProcessIdentifier)): New.
(putTask(ProcessIdentifier,LinuxPtraceTask)): New.
* LinuxWaitBuilder.java (searchId): Delete.
(get(ProcessIdentifier,String)): New.
* LinuxPtraceTask.java: Register with LinuxPtraceHost.
-----------------------------------------------------------------------
Summary of changes:
frysk-core/frysk/proc/live/ChangeLog | 6 ++
frysk-core/frysk/proc/live/LinuxPtraceHost.java | 13 +++++
frysk-core/frysk/proc/live/LinuxPtraceTask.java | 3 +
frysk-core/frysk/proc/live/LinuxWaitBuilder.java | 56 ++++++++-------------
4 files changed, 43 insertions(+), 35 deletions(-)
First 500 lines of diff:
diff --git a/frysk-core/frysk/proc/live/ChangeLog b/frysk-core/frysk/proc/live/ChangeLog
index c38ab2b..86391b7 100644
--- a/frysk-core/frysk/proc/live/ChangeLog
+++ b/frysk-core/frysk/proc/live/ChangeLog
@@ -1,5 +1,11 @@
2008-02-07 Andrew Cagney <cagney@redhat.com>
+ * LinuxPtraceHost.java (getTask(ProcessIdentifier)): New.
+ (putTask(ProcessIdentifier,LinuxPtraceTask)): New.
+ * LinuxWaitBuilder.java (searchId): Delete.
+ (get(ProcessIdentifier,String)): New.
+ * LinuxPtraceTask.java: Register with LinuxPtraceHost.
+
* LinuxPtraceHost.java (requestRefreshXXX()): Delete.
* TestTaskObserverBlocked.java: Update.
diff --git a/frysk-core/frysk/proc/live/LinuxPtraceHost.java b/frysk-core/frysk/proc/live/LinuxPtraceHost.java
index 67ae93b..5e89a41 100644
--- a/frysk-core/frysk/proc/live/LinuxPtraceHost.java
+++ b/frysk-core/frysk/proc/live/LinuxPtraceHost.java
@@ -61,6 +61,8 @@ import frysk.sys.Pid;
import frysk.event.Event;
import frysk.proc.FindProc;
import frysk.proc.HostRefreshBuilder;
+import java.util.Map;
+import java.util.WeakHashMap;
import java.util.Collection;
/**
@@ -78,6 +80,17 @@ public class LinuxPtraceHost extends LiveHost {
/**
+ * Maintain a cache of tasks indexed by ProcessIdentifier.
+ */
+ private final Map tasks = new WeakHashMap();
+ LinuxPtraceTask getTask(ProcessIdentifier pid) {
+ return (LinuxPtraceTask) tasks.get(pid);
+ }
+ void putTask(ProcessIdentifier pid, LinuxPtraceTask task) {
+ tasks.put(pid, task);
+ }
+
+ /**
* Either add or update a process, however, before doing that
* determine the parent and ensure that it has been updated.
*/
diff --git a/frysk-core/frysk/proc/live/LinuxPtraceTask.java b/frysk-core/frysk/proc/live/LinuxPtraceTask.java
index 3753819..51f2ca6 100644
--- a/frysk-core/frysk/proc/live/LinuxPtraceTask.java
+++ b/frysk-core/frysk/proc/live/LinuxPtraceTask.java
@@ -83,6 +83,7 @@ public class LinuxPtraceTask extends LiveTask {
public LinuxPtraceTask(Proc proc, TaskId id) {
super(proc, id);
tid = ProcessIdentifierFactory.createFIXME(id.hashCode());
+ ((LinuxPtraceHost)proc.getHost()).putTask(tid, this);
newState = LinuxPtraceTaskState.detachedState();
}
/**
@@ -92,6 +93,7 @@ public class LinuxPtraceTask extends LiveTask {
// XXX: shouldn't need to grub around in the old task's state.
super(task, new TaskId(clone.intValue()));
tid = clone;
+ ((LinuxPtraceHost)getProc().getHost()).putTask(tid, this);
newState = LinuxPtraceTaskState.clonedState(((LinuxPtraceTask)task).getState ());
}
/**
@@ -101,6 +103,7 @@ public class LinuxPtraceTask extends LiveTask {
TaskObserver.Attached attached) {
super(proc, attached);
tid = ProcessIdentifierFactory.createFIXME(proc.getPid());
+ ((LinuxPtraceHost)proc.getHost()).putTask(tid, this);
newState = LinuxPtraceTaskState.mainState();
if (attached != null) {
TaskObservation ob = new TaskObservation(this, attachedObservers,
diff --git a/frysk-core/frysk/proc/live/LinuxWaitBuilder.java b/frysk-core/frysk/proc/live/LinuxWaitBuilder.java
index f16d53e..a583c3f 100644
--- a/frysk-core/frysk/proc/live/LinuxWaitBuilder.java
+++ b/frysk-core/frysk/proc/live/LinuxWaitBuilder.java
@@ -44,24 +44,25 @@ import frysk.sys.Signal;
import frysk.sys.WaitBuilder;
import java.util.LinkedList;
import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import frysk.proc.TaskId;
+import frysk.rsl.Log;
import frysk.proc.Task;
import frysk.proc.TaskObserver;
import frysk.sys.ProcessIdentifier;
+import java.util.logging.Level;
+import java.util.logging.Logger;
/**
* Handles wait events generated by the wait builder.
*/
class LinuxWaitBuilder implements WaitBuilder {
- LinuxWaitBuilder (LinuxPtraceHost host)
- {
- searchId = new SearchId (host);
- }
+ private static final Logger logger = Logger.getLogger("frysk");
+ private static final Log fine = Log.fine(LinuxWaitBuilder.class);
- static final Logger logger = Logger.getLogger("frysk");
+ private final LinuxPtraceHost host;
+ LinuxWaitBuilder(LinuxPtraceHost host) {
+ this.host = host;
+ }
/**
* Maintain a list of fscked up kernel waitpid events - where an
@@ -102,29 +103,14 @@ class LinuxWaitBuilder implements WaitBuilder {
return "" + super.toString () + ",stopped,pid=" + pid;
}
};
- logger.log(Level.FINE, "{0} rescheduled\n", rescheduled);
+ fine.log(this, "rescheduled", rescheduled);
fsckedOrderedKernelEvents.add(rescheduled);
}
- // Hold onto a scratch ID; avoids overhead of allocating a new
- // taskId everytime a new event arrives -- micro optimization..
- static class SearchId extends TaskId {
- private final LinuxPtraceHost host;
- SearchId (LinuxPtraceHost host) {
- super (0);
- this.host = host;
- }
- LinuxPtraceTask get(int pid, String why) {
- id = pid;
- logger.log(Level.FINE, why, this);
- return (LinuxPtraceTask) (host.get(this));
- }
- LinuxPtraceTask get(ProcessIdentifier pid, String why) {
- logger.log(Level.FINE, why, pid);
- return get(pid.intValue(), why);
- }
+ private LinuxPtraceTask get(ProcessIdentifier pid, String why) {
+ fine.log(this, why, pid);
+ return host.getTask(pid);
}
- private final SearchId searchId;
private void logMissing(String what, ProcessIdentifier pid) {
logger.log(Level.WARNING,
@@ -140,7 +126,7 @@ class LinuxWaitBuilder implements WaitBuilder {
// what happened. Note that hot on the heels of this event is
// a clone.stopped event, and the clone Task must be created
// before that event arrives.
- LinuxPtraceTask task = searchId.get(pid, "{0} cloneEvent\n");
+ LinuxPtraceTask task = get(pid, "cloneEvent");
// Create an attached, and running, clone of TASK.
LinuxPtraceTask clone = new LinuxPtraceTask(task, clonePid);
task.processClonedEvent(clone);
@@ -153,7 +139,7 @@ class LinuxWaitBuilder implements WaitBuilder {
// happened. Note that hot on the heels of this fork event is
// the child's stop event, the fork Proc must be created
// before that event arrives.
- LinuxPtraceTask task = searchId.get(pid, "{0} forkEvent\n");
+ LinuxPtraceTask task = get(pid, "forkEvent");
// Create an attached and running fork of TASK.
LinuxPtraceProc forkProc = new LinuxPtraceProc(task, fork);
// The main task.
@@ -165,7 +151,7 @@ class LinuxWaitBuilder implements WaitBuilder {
public void exitEvent(ProcessIdentifier pid, Signal signal,
int status, boolean coreDumped) {
- LinuxPtraceTask task = searchId.get(pid, "{0} exitEvent\n");
+ LinuxPtraceTask task = get(pid, "exitEvent");
if (task == null)
// Stray pid from uncontrolled fork.
logMissing("exited", pid);
@@ -174,12 +160,12 @@ class LinuxWaitBuilder implements WaitBuilder {
}
public void execEvent(ProcessIdentifier pid) {
- LinuxPtraceTask task = searchId.get(pid, "{0} execEvent\n");
+ LinuxPtraceTask task = get(pid, "execEvent");
task.processExecedEvent();
}
public void disappeared(ProcessIdentifier pid, Throwable w) {
- LinuxPtraceTask task = searchId.get(pid, "{0} disappeared\n");
+ LinuxPtraceTask task = get(pid, "disappeared");
// XXX Sometimes it seems it has already disappeared and this fails
// Catch the failure, but not sure what to do with the failure right now
// Failures were seen here while running frysk.hpd.TestRunCommand -r 20
@@ -189,12 +175,12 @@ class LinuxWaitBuilder implements WaitBuilder {
}
public void syscallEvent(ProcessIdentifier pid) {
- LinuxPtraceTask task = searchId.get(pid, "{0} syscallEvent\n");
+ LinuxPtraceTask task = get(pid, "syscallEvent");
task.processSyscalledEvent();
}
public void stopped(ProcessIdentifier pid, Signal sig) {
- LinuxPtraceTask task = searchId.get(pid, "{0} stopped\n");
+ LinuxPtraceTask task = get(pid, "stopped");
if (task == null) {
// If there's no Task corresponding to TID, assume that
// the kernel fscked up its event ordering - notifying of
@@ -209,7 +195,7 @@ class LinuxWaitBuilder implements WaitBuilder {
public void terminated(ProcessIdentifier pid, Signal signal,
int status, boolean coreDumped) {
- LinuxPtraceTask task = searchId.get(pid, "{0} terminated\n");
+ LinuxPtraceTask task = get(pid, "terminated");
if (task == null)
// Stray pid from uncontrolled fork.
logMissing("terminated", pid);
hooks/post-receive
--
frysk system monitor/debugger
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2008-02-07 20:47 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-02-07 20:47 [SCM] master: Maintain a task list indexed by ProcessIdentifier cagney
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).