diff --git a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/ReconstructionEngine.java b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/ReconstructionEngine.java index fa53b15a1c..2c3280e576 100644 --- a/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/ReconstructionEngine.java +++ b/common-tools/clas-reco/src/main/java/org/jlab/clas/reco/ReconstructionEngine.java @@ -78,6 +78,8 @@ public abstract class ReconstructionEngine implements Engine { abstract public boolean init(); abstract public void detectorChanged(int runNumber); + final Object detectorChangedLock = new Object(); + public ReconstructionEngine(String name, String author, String version){ engineName = name; engineAuthor = author; @@ -345,16 +347,18 @@ public void dropBanks(DataEvent event) { } } } - - public synchronized boolean checkRunNumber(DataEvent event) { + + public boolean checkRunNumber(DataEvent event) { int r = runNumberOverride; if (r <= 0 && event.hasBank("RUN::config")) { r = event.getBank("RUN::config").getInt("run",0); } if (r > 0) { - if (this.runNumbers.isEmpty() || r != this.runNumbers.get(this.runNumbers.size()-1)) { - this.runNumbers.add(r); - this.detectorChanged(r); + synchronized (detectorChangedLock) { + if (this.runNumbers.isEmpty() || r != this.runNumbers.get(this.runNumbers.size()-1)) { + this.runNumbers.add(r); + this.detectorChanged(r); + } } } return !this.ignoreInvalidRunNumbers || r>0;