summaryrefslogtreecommitdiff
path: root/src/actors
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2008-02-13 17:32:01 +0000
committerPhilipp Haller <hallerp@gmail.com>2008-02-13 17:32:01 +0000
commit8125e64385e20c45c013f5ba18ca2c683a2f3131 (patch)
tree5c46620a39bb415cdd740aa49a759b98d05eeb7d /src/actors
parent0fb6357fa686f87d409a62e38dbb5a835faeb892 (diff)
downloadscala-8125e64385e20c45c013f5ba18ca2c683a2f3131.tar.gz
scala-8125e64385e20c45c013f5ba18ca2c683a2f3131.tar.bz2
scala-8125e64385e20c45c013f5ba18ca2c683a2f3131.zip
Fixed #459
Diffstat (limited to 'src/actors')
-rw-r--r--src/actors/scala/actors/FJTaskRunnerGroup.java26
-rw-r--r--src/actors/scala/actors/FJTaskScheduler2.scala5
-rw-r--r--src/actors/scala/actors/Scheduler.scala2
3 files changed, 15 insertions, 18 deletions
diff --git a/src/actors/scala/actors/FJTaskRunnerGroup.java b/src/actors/scala/actors/FJTaskRunnerGroup.java
index 1120dd1f54..5485817614 100644
--- a/src/actors/scala/actors/FJTaskRunnerGroup.java
+++ b/src/actors/scala/actors/FJTaskRunnerGroup.java
@@ -161,25 +161,25 @@ public class FJTaskRunnerGroup implements IFJTaskRunnerGroup {
/* -------- Suspending -------- */
- void snapshot() throws InterruptedException {
- // set flag in all task runners to suspend
- for (int i = 0; i < threads.length; ++i) {
- FJTaskRunner t = threads[i];
- t.setSuspending(true);
- }
-
- // interrupt all task runners
- // assume: current thread not in threads (scheduler)
- for (int i = 0; i < threads.length; ++i) {
- Thread t = threads[i];
- t.interrupt();
+ LinkedQueue snapshot() throws InterruptedException {
+ synchronized (this) {
+ for (int i = 0; i < threads.length; ++i) {
+ FJTaskRunner t = threads[i];
+ // set flag in all task runners to suspend
+ t.setSuspending(true);
+ // interrupt all task runners
+ // assume: current thread not in threads (scheduler)
+ t.interrupt();
+ }
}
// wait until all of them have terminated
for (int i = 0; i < threads.length; ++i) {
Thread t = threads[i];
t.join();
- }
+ };
+
+ return entryQueue;
}
/**
diff --git a/src/actors/scala/actors/FJTaskScheduler2.scala b/src/actors/scala/actors/FJTaskScheduler2.scala
index 934ccefaa8..fb34081c20 100644
--- a/src/actors/scala/actors/FJTaskScheduler2.scala
+++ b/src/actors/scala/actors/FJTaskScheduler2.scala
@@ -210,12 +210,9 @@ class FJTaskScheduler2 extends Thread with IScheduler {
TimerThread.shutdown()
}
- def snapshot(): LinkedQueue = synchronized {
+ def snapshot(): LinkedQueue = {
suspending = true
executor.snapshot()
- // grab tasks from executor
- executor.entryQueue
}
-
}
diff --git a/src/actors/scala/actors/Scheduler.scala b/src/actors/scala/actors/Scheduler.scala
index 73d40bea48..8396c20f47 100644
--- a/src/actors/scala/actors/Scheduler.scala
+++ b/src/actors/scala/actors/Scheduler.scala
@@ -42,7 +42,7 @@ object Scheduler {
private var tasks: LinkedQueue = null
private var pendingCount = 0
- def snapshot(): Unit = synchronized {
+ def snapshot(): Unit = {
tasks = sched.snapshot()
pendingCount = sched.asInstanceOf[FJTaskScheduler2].getPendingCount
sched.shutdown()