import jalview.api.AlignCalcManagerI;
import jalview.api.AlignCalcWorkerI;
+import jalview.bin.Cache;
import jalview.datamodel.AlignmentAnnotation;
import java.util.ArrayList;
{
restartable = Collections
.synchronizedList(new ArrayList<AlignCalcWorkerI>());
- blackList = Collections
- .synchronizedList(new ArrayList<Class<? extends AlignCalcWorkerI>>());
+ blackList = Collections.synchronizedList(
+ new ArrayList<Class<? extends AlignCalcWorkerI>>());
inProgress = Collections
.synchronizedList(new ArrayList<AlignCalcWorkerI>());
- updating = Collections
- .synchronizedMap(new Hashtable<Class<? extends AlignCalcWorkerI>, List<AlignCalcWorkerI>>());
+ updating = Collections.synchronizedMap(
+ new Hashtable<Class<? extends AlignCalcWorkerI>, List<AlignCalcWorkerI>>());
canUpdate = new HashSet<>();
}
+ private static boolean listContains(List<AlignCalcWorkerI> upd,
+ AlignCalcWorkerI worker)
+ {
+ // avoid use of 'Contains' in case
+ for (AlignCalcWorkerI _otherworker : upd)
+ {
+ if (_otherworker == upd)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
@Override
public void notifyStart(AlignCalcWorkerI worker)
{
List<AlignCalcWorkerI> upd = updating.get(worker.getClass());
if (upd == null)
{
- updating.put(
- worker.getClass(),
- upd = Collections
- .synchronizedList(new ArrayList<AlignCalcWorkerI>()));
+ updating.put(worker.getClass(), upd = Collections
+ .synchronizedList(new ArrayList<AlignCalcWorkerI>()));
}
synchronized (upd)
{
- upd.add(worker);
+ if (listContains(upd, worker))
+ {
+ Cache.log.debug(
+ "Ignoring second call to notifyStart for worker "
+ + worker);
+ }
+ else
+ {
+ upd.add(worker);
+ }
}
}
}
{
synchronized (inProgress)
{
- if (inProgress.contains(worker))
+ if (listContains(inProgress, worker))
{
return false; // worker is already working, so ask caller to wait around
}
{
synchronized (inProgress)
{
- // System.err.println("Worker " + worker + " marked as complete.");
+ Cache.log.debug("Worker " + worker + " marked as complete.");
inProgress.remove(worker);
List<AlignCalcWorkerI> upd = updating.get(worker.getClass());
if (upd != null)
{
synchronized (restartable)
{
- if (!restartable.contains(worker))
+ if (!listContains(restartable, worker))
{
restartable.add(worker);
}
}
@Override
- public boolean workingInvolvedWith(AlignmentAnnotation alignmentAnnotation)
+ public boolean workingInvolvedWith(
+ AlignmentAnnotation alignmentAnnotation)
{
synchronized (inProgress)
{