NOTICE! This is a static HTML version of a legacy Fiji BugZilla bug.

The Fiji project now uses GitHub Issues for issue tracking.

Please file all new issues there.

Bug 854 - Multithreading problem in javascript macro
Multithreading problem in javascript macro
Status: RESOLVED WONTFIX
Product: Fiji
Classification: Unclassified
Component: Other
unspecified
PC Linux
: P4 normal
Assigned To: ImageJ Bugs Mailing List
Depends on:
Blocks:
 
Reported: 2014-07-15 07:44 CDT by Thomas Siegmund
Modified: 2014-08-28 12:04 CDT
4 users (show)

See Also:


Attachments
test script (12.63 KB, text/plain)
2014-08-20 05:47 CDT, Thomas Siegmund
second version of the test script (10.34 KB, application/javascript)
2014-08-28 10:40 CDT, Thomas Siegmund

Description Thomas Siegmund 2014-07-15 07:44:29 CDT
Hi,

I've a a javascript macro running multithreaded as described in 

http://fiji.sc/Multithreaded_Image_Processing_in_Javascript.

The script analyzes several images in parallel. For each image it loops over a few hundered cell clusters and analyzes the nuclei within using the ParticleAnalyzer. Most of the code seems to work fine, but within these few lines there is a problem:

// now count and measure nuclei within
var nucleiMeasurements = Measurements.AREA + Measurements.CIRCULARITY;
var rt_nuclei = new ResultsTable();
var nucleiPA = new ParticleAnalyzer(ParticleAnalyzer.SHOW_RESULTS + ParticleAnalyzer.ADD_TO_MANAGER + ParticleAnalyzer.CLEAR_WORKSHEET, nucleiMeasurements, rt_nuclei, nucleusMinSize, nucleusMaxSize, nucleusMinRoundness, 1);
var nuclei_manager = new RoiManager(true); 
nucleiPA.setRoiManager(nuclei_manager);
nucleiPA.analyze(dapiImg);
IJ.log("rt: "+ rt_nuclei.getCounter() + " rm: " +  nuclei_manager.getCount());
var nNuclei = rt_nuclei.getCounter();
if(nNuclei != nuclei_manager.getCount()) {
     // this happens only if the script runs multithreaded. ???
     IJ.log("number of nuclei != number of ROIS !!!!: "+image+" "+i+", nNuclei "+nNuclei+", nucleiRoisLength "+nuclei_manager.getCount());
}

Maybe I'm doing something stupid here, but it seems to work perfectly if running single threaded. The number of ROIs in the manager is the same as the number of entries in the results table. But whenever I run this multithreaded it fails in one out of a few hundered cell clusters.

Tested with current Fiji on Linux and Windows as well as with older versions of Fiji.

Thanks

Thomas

Information about your version of Java:

  os.arch => amd64
  os.name => Linux
  os.version => 3.4.63-2.44-desktop
  java.version => 1.6.0_24
  java.vendor => Sun Microsystems Inc.
  java.runtime.name => Java(TM) SE Runtime Environment
  java.runtime.version => 1.6.0_24-b07
  java.vm.name => Java HotSpot(TM) 64-Bit Server VM
  java.vm.version => 19.1-b02
  java.vm.vendor => Sun Microsystems Inc.
  java.vm.info => mixed mode
  java.awt.graphicsenv => sun.awt.X11GraphicsEnvironment
  java.specification.name => Java Platform API Specification
  java.specification.version => 1.6
  sun.cpu.endian => little
  sun.desktop => null
  file.separator => /

The up-to-date check says: REMIND_LATER

Information relevant to JAVA_HOME related problems:

  JAVA_HOME is set to: /usr/local/src/Fiji.app/java/linux-amd64/jdk1.6.0_24//jre
  imagej.dir => /usr/local/src/Fiji.app

Information about the version of each plugin:

Activated update sites:
ImageJ: http://update.imagej.net/ (last check:20140712000647)
Fiji: http://fiji.sc/update/ (last check:20140715020940)

Files not up-to-date:
  9dda14a8 (LOCAL_ONLY) 20100729201826 macros/js/AA_README.txt
  20e2cec7 (LOCAL_ONLY) 20140207105410 plugins/ICTN_1_6_.jar
  d3260180 (LOCAL_ONLY) 20110303204101 scripts/Record_Desktop.py
  0ea7f8fc (LOCAL_ONLY) 20110303204101 scripts/Record_Window.py
Comment 1 Johannes Schindelin 2014-07-22 15:18:50 CDT
Have you looked at the console output? http://imagej.net/Command-Line_Debugging should help identify issues when there are critical errors logged only to the console.
Comment 2 Thomas Siegmund 2014-07-23 02:59:59 CDT
Hi Johannes,

thanks for looking into this. I don't see anything interesting in debug output, but this may only reflect my ignorance. Please find the logs below.

Please let me know if there is something else I can do. I could share the script and example images privately.

All the best

Thomas




Debug output in log window:



opening: /scratch/plate15/plate15_SMAD/NCMC_plate15_SMAD_Result_s3.ome.tiff
saving: /scratch/plate15/plate15_SMAD_out/NCMC_plate15_SMAD_Result_s3
threads: 2
opening: /scratch/plate15/plate15_SMAD/NCMC_plate15_SMAD_Result_s1.ome.tiff
opening: /scratch/plate15/plate15_SMAD/NCMC_plate15_SMAD_Result_s2.ome.tiff
number of nuclei != number of ROIS !!!!: /scratch/plate15/plate15_SMAD/NCMC_plate15_SMAD_Result_s2.ome.tiff 59, nNuclei 10, nucleiRoisLength 1
number of nuclei != number of ROIS !!!!: /scratch/plate15/plate15_SMAD/NCMC_plate15_SMAD_Result_s1.ome.tiff 92, nNuclei 0, nucleiRoisLength 2
number of nuclei != number of ROIS !!!!: /scratch/plate15/plate15_SMAD/NCMC_plate15_SMAD_Result_s2.ome.tiff 113, nNuclei 4, nucleiRoisLength 1
number of nuclei != number of ROIS !!!!: /scratch/plate15/plate15_SMAD/NCMC_plate15_SMAD_Result_s1.ome.tiff 146, nNuclei 2, nucleiRoisLength 1
number of nuclei != number of ROIS !!!!: /scratch/plate15/plate15_SMAD/NCMC_plate15_SMAD_Result_s1.ome.tiff 201, nNuclei 1, nucleiRoisLength 6
number of nuclei != number of ROIS !!!!: /scratch/plate15/plate15_SMAD/NCMC_plate15_SMAD_Result_s2.ome.tiff 171, nNuclei 2, nucleiRoisLength 1
saving: /scratch/plate15/plate15_SMAD_out/NCMC_plate15_SMAD_Result_s2
saving: /scratch/plate15/plate15_SMAD_out/NCMC_plate15_SMAD_Result_s1
time: 803.601 seconds

Debug output in console:

[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        progress = -1
        maximum = -1
        status = Running command: script:/shared/Science/Scripts/cardiomyocytes/cardiomyocytes_ij.js
        warning = false,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae,null,null), called from non-EDT Thread:null
[DEBUG] Executing module: org.scijava.script.ScriptModule@77e72cae
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = org.scijava.module.process.DebugPreprocessor@6a269101,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = org.scijava.module.process.ValidityPreprocessor@9fa0f19,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = org.scijava.ui.UIPreprocessor@7ff5376c,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = org.scijava.display.ActiveDisplayPreprocessor@3c09d515,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = org.scijava.module.process.GatewayPreprocessor@2984747e,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = org.scijava.module.process.ServicePreprocessor@36fc117d,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = net.imagej.display.ActiveImagePreprocessor@5ee041be,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = net.imagej.legacy.plugin.ActiveImagePlusPreprocessor@54fc519b,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = org.scijava.module.process.InitPreprocessor@151c2b4,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = org.scijava.module.process.LoadInputsPreprocessor@1ec5b819,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = org.scijava.ui.FilePreprocessor@46b98117,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = org.scijava.ui.awt.widget.AWTInputHarvester@3cca3147,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = org.scijava.ui.swing.widget.SwingInputHarvester@7e694b7e,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = org.scijava.ui.swing.widget.SwingMdiInputHarvester@32db7e08,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = net.imagej.legacy.ui.LegacyInputHarvester@682f594d,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = org.scijava.module.process.CheckInputsPreprocessor@7c9003aa,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = org.scijava.module.process.SaveInputsPreprocessor@52e0cdc9,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae,null,null), called from non-EDT Thread:null
09:47:14.731 [Run$_SciJava-3852eef4-Thread-5] INFO  loci.formats.in.MinimalTiffReader - Reading IFDs
09:47:14.763 [Run$_SciJava-3852eef4-Thread-5] INFO  loci.formats.in.MinimalTiffReader - Populating metadata
09:47:39.973 [Run$_Thread-9] INFO  loci.formats.in.MinimalTiffReader - Reading IFDs
09:47:39.996 [Run$_Thread-9] INFO  loci.formats.in.MinimalTiffReader - Populating metadata
09:47:40.134 [Run$_Thread-10] INFO  loci.formats.in.MinimalTiffReader - Reading IFDs
09:47:40.157 [Run$_Thread-10] INFO  loci.formats.in.MinimalTiffReader - Populating metadata
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae,null,null), called from non-EDT Thread:null
[DEBUG] INPUTS:
[DEBUG] OUTPUTS:
[DEBUG]         result = null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = org.scijava.module.process.DebugPostprocessor@164b3e4f,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae
        processor = org.scijava.display.DisplayPostprocessor@25e7bff8,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        module = org.scijava.script.ScriptModule@77e72cae,null,null), called from non-EDT Thread:null
[DEBUG] publish(
        context = org.scijava.Context@3852eef4
        consumed = false
        progress = -1
        maximum = -1
        status = Command finished: script:/shared/Science/Scripts/cardiomyocytes/cardiomyocytes_ij.js
        warning = false,null,null), called from non-EDT Thread:null
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
[DEBUG] Waiting for 3 threads to die
[DEBUG] THREAD: Script Editor Run :: Wed Jul 23 09:34:55 CEST 2014
[DEBUG] THREAD: Run$_SciJava-3852eef4-Thread-5
[DEBUG] THREAD: SciJava-3852eef4-Thread-7
Comment 3 Johannes Schindelin 2014-07-23 09:28:49 CDT
Indeed, that log does not contain much in the way of helpful information.

Maybe it is a dead lock? Please find information how to debug this here: http://imagej.net/Command-Line_Debugging#Debugging_JVM_hangs
Comment 4 Thomas Siegmund 2014-08-20 05:47:55 CDT
Created attachment 204
test script

Not what I would call a minimal test case, but I have at least tried to trim  it down to something reasonable.

To reproduce the problem, please download a test image from Dropbox (60Mb tiff, too big to attach here):

https://www.dropbox.com/s/8nvb42a0hum8rjg/test_image.tiff 

Put the image in an otherwise empty directory, run "multithreading-bug_ij.js".

The script will ask for the image directory and open results and log windows. it will then analyze the image once single threaded and then twice multithreaded. On my systems in multithreaded mode it will log the error from line 296 usually several times:

 ERROR: number of nuclei != number of ROIS !!!!: test_image.tiff 109, nNuclei 0, nucleiRoisLength 1

The number and details of the errors will vary from run to run.

Multithreading can be switched off completely in line 66. In this mode I have never seen a problem with the analysis.

Best

Thomas
Comment 5 Curtis Rueden 2014-08-21 15:03:56 CDT
I downloaded your script and your TIFF, and was able to reproduce the problem on my OS X machine. Impressive script, Thomas!

Unfortunately, debugging concurrency issues is one of the more difficult and time consuming programming tasks. And ImageJ 1.x is rife with concurrency problems lurking under the hood, which most people rarely encounter, but which advanced script writers such as yourself sometimes bump into.

I really appreciate that you would love some help debugging your code, but given the complexity of the script, in this case I think there is no option but for you, or someone else in your group, to dig in more deeply and identify the root cause of the issue. Ultimately, you have a large function being called by many threads at once into IJ1 data structures which are probably not thread-safe, so some synchronized blocks may be in order (and I'm not sure how you do that in JavaScript).

Two parting suggestions:

1) You could recast your code as a Java plugin and use an IDE with a dedicated debugger, memory profiler, and many other goodies. Debugging concurrency issues from Eclipse (by attaching to a running Fiji as a remote debugger; see http://fiji.sc/Debugging_intro#Attaching_to_ImageJ_instances) will be easier than debugging things from the ImageJ Script Editor in JavaScript with no such tools.

2) You could post a Minimal, Complete and Verifiable example on StackOverflow (http://stackoverflow.com/help/mcve) and hope that someone from the larger community of developers there has additional suggestions or insight.

I wish you the best of luck with it.
Comment 6 Thomas Siegmund 2014-08-22 02:18:08 CDT
Thanks a lot for your comments, Curtis.

> Curtis wrote:
> I think there is no option but for you, or someone else in your group, to dig in more deeply and identify the root cause of the issue.

Fair enough, but I don't know if we will find time to dig as deep into ImageJ as you propose - maybe I'd rather look into alternatives. ImageJ has served us well for many years, but with more and more data from automated microscope systems there is definitely need for a high performance (and this means thread save) platform.

> Curtis wrote:
> ImageJ 1.x is rife with concurrency problems lurking under the hood, which most people rarely encounter, but which advanced script writers such as yourself sometimes bump into.

Maybe there should be a warning somewhere on the pages advertising multithreaded scripting. I noticed these problems only due to a bug in an earlier version of my script. If I had done I better job I would not have noticed these deeper problems.

Thanks again

Thomas
Comment 7 Johannes Schindelin 2014-08-22 03:33:27 CDT
> Maybe there should be a warning somewhere on the pages advertising multithreaded scripting.

Thomas, feel free to contribute to the project by making this happen. The Fiji wiki is a community resource, and lives and thrives on contributions by a collaborative, active community.

> with more and more data from automated microscope systems there is definitely need for a high performance (and this means thread save) platform.

You might want to give KNIME a try; it is thread-safe and is backed by a company you can always hire if you have trouble. KNIME's image processing support is developed parallel to the ImageJ2 project, sharing a lot of code and insights, a very friendly, collegial and exciting collaboration!
Comment 8 Curtis Rueden 2014-08-22 12:10:37 CDT
Great idea Johannes; KNIME could be a perfect fit for this kind of use case. It's really industrial strength, multithreaded, great for automation and mass processing! And it is increasingly integrated with ImageJ2 so as time goes on you will be able to get the best of both worlds there.
Comment 9 Thomas Siegmund 2014-08-27 09:33:59 CDT
>> Maybe there should be a warning somewhere on the pages advertising >multithreaded scripting.

>Thomas, feel free to contribute to the project by making this happen. The Fiji >wiki is a community resource, and lives and thrives on contributions by a >collaborative, active community.

Usually I would have done, in this case I thought the core developers will have a better and more balanced view. Based Curtis statements I would only recommend everybody to steer away from multithreaded scripts in ImageJ.

> You might want to give KNIME a try; 

Thanks Johannes and Curtis, very good idea. I have not looked into Knime image processing for quite a while. Seems to be a perfect time to re-evaluate it.

Thanks again, best regards

Thomas
Comment 10 Johannes Schindelin 2014-08-27 13:27:16 CDT
> in this case I thought the core developers will have a better and more balanced view.

Fair enough. But keep in mind that a community run by three core developers (especially when they are expected to take care of all community resources, not just some core source code) is not a community.

In other words, if you want to be part of a thriving community, you might want to consider contributing your share to the "thriving" part of it.
Comment 11 Thomas Siegmund 2014-08-28 10:40:13 CDT
Created attachment 211
second version of the test script

Hi,

we have further simplified the script and identified a single line which seems to trigger the bug.

In line 234 the script fetches rois from a roi manager for further measurements in another channel (not included here). If we remove this line the error seems to be gone.

Best

Thomas
Comment 12 Curtis Rueden 2014-08-28 11:04:12 CDT
You might be able to synchronize access to the ROI Manager, then; see:
https://blogs.oracle.com/sundararajan/entry/synchronized_methods_in_javascript
Comment 13 Wayne Rasband 2014-08-28 11:38:39 CDT
You can probably work around this problem by using Overlays instead of ROIManagers. An Overlay is basically an ROIManager without a GUI.
Comment 14 Wayne Rasband 2014-08-28 12:04:34 CDT
The RoiManager#ggetRoisAsArray() method is synchronized in the latest ImageJ daily build (1.49h2).