Skip to content

ModeAHDC thread safety #1047

@baltzell

Description

@baltzell

The extract method is no longer thread safe, particularly these member data:

private short[] samples;
private Pulse pulse;
private long time_ZS;
private int binMax;
private int numberOfBins;
private int effectiveNumberOfBins;

For example, when sample count gets overwritten by a competing thread, from any RG-L logs:

2026-01-06 00:36:46.154: Error in 129.57.138.232%7300_java:clas12-3:AHDC (ID: 0):
Error processing input event

java.lang.ArrayIndexOutOfBoundsException: Index -99 out of bounds for length 30
	at org.jlab.detector.pulse.ModeAHDC.waveformCFAprocessing(ModeAHDC.java:252)
	at org.jlab.detector.pulse.ModeAHDC.extract(ModeAHDC.java:380)
	at org.jlab.detector.pulse.HipoExtractor.getPulses(HipoExtractor.java:134)
	at org.jlab.detector.pulse.ModeAHDC.update(ModeAHDC.java:397)
	at org.jlab.service.ahdc.AHDCEngine.processDataEvent(AHDCEngine.java:120)
	at org.jlab.clas.reco.ReconstructionEngine.filterEvent(ReconstructionEngine.java:368)
	at org.jlab.clas.reco.ReconstructionEngine.execute(ReconstructionEngine.java:407)
	at org.jlab.clara.sys.ServiceEngine.executeEngine(ServiceEngine.java:227)
	at org.jlab.clara.sys.ServiceEngine.execute(ServiceEngine.java:153)
	at org.jlab.clara.sys.Service.lambda$execute$2(Service.java:178)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1583)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions