|
From: <bea...@us...> - 2006-11-21 22:06:08
|
Revision: 337
http://svn.sourceforge.net/cishell/?rev=337&view=rev
Author: bearsfan
Date: 2006-11-21 14:06:07 -0800 (Tue, 21 Nov 2006)
Log Message:
-----------
Fixed a race condition for scheduling an algorithm
Modified Paths:
--------------
trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/scheduler/SchedulerServiceImpl.java
Modified: trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/scheduler/SchedulerServiceImpl.java
===================================================================
--- trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/scheduler/SchedulerServiceImpl.java 2006-11-21 22:05:30 UTC (rev 336)
+++ trunk/core/org.cishell.reference/src/org/cishell/reference/app/service/scheduler/SchedulerServiceImpl.java 2006-11-21 22:06:07 UTC (rev 337)
@@ -411,12 +411,17 @@
"State was not one of allowable states: " + state);
}
}
- this._algMap.put(alg, new AlgorithmTask(alg, ref, time, this));
+ //this._algMap.put(alg, new AlgorithmTask(alg, ref, time, this));
+ new AlgorithmTask(alg, ref, time, this);
}
public synchronized final int getMaxSimultaneousAlgs() {
return this._maxSimultaneousAlgs;
}
+
+ public synchronized final void registerAlgorithmTask(Algorithm algorithm, AlgorithmTask algorithmTask) {
+ this._algMap.put(algorithm, algorithmTask);
+ }
/**
* @param alg
@@ -483,7 +488,7 @@
private volatile int _numRunning = 0;
- public void algorithmScheduled(Algorithm algorithm, Calendar time) {
+ public synchronized void algorithmScheduled(Algorithm algorithm, Calendar time) {
_schedulerListener.algorithmScheduled(algorithm, time);
}
@@ -492,32 +497,32 @@
_schedulerListener.algorithmStarted(algorithm);
}
- public void algorithmError(Algorithm algorithm, Throwable error) {
- purgeFinished();
+ public synchronized void algorithmError(Algorithm algorithm, Throwable error) {
_numRunning--;
_schedulerListener.algorithmError(algorithm, error);
+ purgeFinished();
}
- public void algorithmFinished(Algorithm algorithm, Data[] createdDM) {
- purgeFinished();
+ public synchronized void algorithmFinished(Algorithm algorithm, Data[] createdDM) {
_numRunning--;
_schedulerListener.algorithmFinished(algorithm, createdDM);
+ purgeFinished();
}
- public void algorithmRescheduled(Algorithm algorithm, Calendar time) {
+ public synchronized void algorithmRescheduled(Algorithm algorithm, Calendar time) {
_schedulerListener.algorithmRescheduled(algorithm, time);
}
- public void algorithmUnscheduled(Algorithm algorithm) {
+ public synchronized void algorithmUnscheduled(Algorithm algorithm) {
_schedulerListener.algorithmUnscheduled(algorithm);
}
- public void schedulerCleared() {
+ public synchronized void schedulerCleared() {
_schedulerListener.schedulerCleared();
}
- public void schedulerRunStateChanged(boolean isRunning) {
+ public synchronized void schedulerRunStateChanged(boolean isRunning) {
_schedulerListener.schedulerRunStateChanged(isRunning);
}
}
@@ -609,11 +614,13 @@
private SchedulerListener _schedulerListener;
public AlgorithmTask(Algorithm alg, ServiceReference ref, Calendar scheduledTime,
- SchedulerListener listener) {
+ //SchedulerListener listener) {
+ AlgSchedulerTask algSchedulerTask) {
_alg = alg;
_ref = ref;
_scheduledTime = scheduledTime;
- _schedulerListener = listener;
+ _schedulerListener = algSchedulerTask;
+ algSchedulerTask.registerAlgorithmTask(alg, this);
_init();
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|