Skip to content

'transport closed' not catch on CAJMonitor.clear #89

Description

@ddequidt

3 days after deploying jca-2.4.12 fixing #87 for ByteBuffer corruption on reconnect, a new error start to raise many times in the console log with same behaviour for the end user on webopi (all pvs appear disconnected).

2026-06-24 06:38:18.262 SEVERE [Thread 192] com.cosylab.epics.caj.CAJChannel (destroyAllMonitors) -
java.lang.IllegalStateException: transport closed
        at com.cosylab.epics.caj.impl.CATransport.submit(CATransport.java:888)
        at com.cosylab.epics.caj.impl.requests.AbstractCARequest.submit(AbstractCARequest.java:88)
        at com.cosylab.epics.caj.CAJMonitor.clear(CAJMonitor.java:141)
        at com.cosylab.epics.caj.CAJChannel.destroyAllMonitors(CAJChannel.java:1213)
        at com.cosylab.epics.caj.CAJChannel.destroyChannel(CAJChannel.java:414)
        at com.cosylab.epics.caj.CAJContext.destroyChannel(CAJContext.java:1107)
        at com.cosylab.epics.caj.CAJChannel.destroy(CAJChannel.java:383)
        at com.cosylab.epics.caj.CAJChannel.destroy(CAJChannel.java:368)
        at org.diirt.support.ca.JCAChannelHandler.disconnect(JCAChannelHandler.java:569)
        at org.diirt.datasource.MultiplexedChannelHandler.guardedDisconnect(MultiplexedChannelHandler.java:323)
        at org.diirt.datasource.MultiplexedChannelHandler.removeWrite(MultiplexedChannelHandler.java:279)
        at org.diirt.datasource.DataSource$4.run(DataSource.java:337)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:833)

and then few minutes later

2026-06-24 06:40:19.371 WARNING [Thread 717880] org.csstudio.opibuilder.util.ErrorHandlerUtil (handleError) - Error from pv connection layer:
java.lang.IllegalStateException: No channel transport available, channel disconnected.
        at com.cosylab.epics.caj.CAJChannel.get(CAJChannel.java:989)
        at org.diirt.support.ca.JCAChannelHandler.setup(JCAChannelHandler.java:336)
        at org.diirt.support.ca.JCAChannelHandler$3$1.run(JCAChannelHandler.java:439)
        at java.base/java.lang.Thread.run(Thread.java:833)

2026-06-24 06:40:19.371 SEVERE [Thread 203] com.cosylab.epics.caj.CAJChannel (updateSubscriptions) -
java.nio.channels.ClosedChannelException
        at java.base/sun.nio.ch.SocketChannelImpl.ensureOpenAndConnected(SocketChannelImpl.java:215)
        at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:527)
        at com.cosylab.epics.caj.impl.CATransport.noSyncSend(CATransport.java:676)
        at com.cosylab.epics.caj.impl.CATransport.submit(CATransport.java:866)
        at com.cosylab.epics.caj.impl.requests.AbstractCARequest.submit(AbstractCARequest.java:88)
        at com.cosylab.epics.caj.impl.requests.EventAddRequest.updateSubscription(EventAddRequest.java:141)
        at com.cosylab.epics.caj.CAJChannel.updateSubscriptions(CAJChannel.java:1328)
        at com.cosylab.epics.caj.CAJChannel.transportResponsive(CAJChannel.java:547)
        at com.cosylab.epics.caj.impl.CATransport.responsiveTransport(CATransport.java:1088)
        at com.cosylab.epics.caj.impl.CATransport.echoNotify(CATransport.java:1039)
        at com.cosylab.epics.caj.impl.handlers.EchoResponse.internalHandleResponse(EchoResponse.java:45)
        at com.cosylab.epics.caj.impl.handlers.AbstractCAResponseHandler.handleResponse(AbstractCAResponseHandler.java:110)
        at com.cosylab.epics.caj.impl.CAResponseHandler.handleResponse(CAResponseHandler.java:139)
        at com.cosylab.epics.caj.impl.CATransport.processRead(CATransport.java:519)
        at com.cosylab.epics.caj.impl.CATransport.processRead(CATransport.java:431)
        at com.cosylab.epics.caj.impl.CATransport.handleEvent(CATransport.java:369)
        at com.cosylab.epics.caj.impl.reactor.lf.LeaderFollowersHandler.handleEvent(LeaderFollowersHandler.java:77)
        at com.cosylab.epics.caj.impl.reactor.Reactor.processInternal(Reactor.java:404)
        at com.cosylab.epics.caj.impl.reactor.Reactor.process(Reactor.java:288)
        at com.cosylab.epics.caj.impl.reactor.lf.LeaderFollowersHandler.run(LeaderFollowersHandler.java:91)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:833)

2026-06-24 06:40:19.371 SEVERE [Thread 203] com.cosylab.epics.caj.impl.CATransport (responsiveTransport) -
java.lang.NullPointerException

2026-06-24 06:40:19.372 SEVERE [Thread 203] com.cosylab.epics.caj.impl.CATransport (responsiveTransport) -
java.lang.NullPointerException

Looks like java.lang.IllegalStateException thrown at

throw new IllegalStateException("transport closed");

should be catched at
} catch (IOException ioex) {

for the following lines to be executed in order to properly cancel request and unregister monitor

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