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. |