code: private synchronized void update(final String configId, final String outputName, final String[] sources) {
      final File outputFile = new File(this.outputDir, outputName);
      //
      // if output file doesn't exist or predates the start of the
      // compile step (most likely a compilation error) then
      // do not write add a history entry
      //
      if (outputFile.exists() && !CUtil.isSignificantlyBefore(outputFile.lastModified(), this.historyFile.lastModified())) {
        this.dirty = true;
        this.history.remove(outputName);
        final SourceHistory[] sourceHistories = new SourceHistory[sources.length];
        for (int i = 0; i < sources.length; i++) {
          final File sourceFile = new File(sources[i]);
          final long lastModified = sourceFile.lastModified();
          final String relativePath = CUtil.getRelativePath(this.outputDirPath, sourceFile);
          sourceHistories[i] = new SourceHistory(relativePath, lastModified);
        }
        final TargetHistory newHistory = new TargetHistory(configId, outputName, outputFile.lastModified(),
            sourceHistories);
        this.history.put(outputName, newHistory);
      }
    }
docs: FREEHEP added synchronized