Hi all,
we are experiencing IllegalStateException from the RBCS decoding when switched to the latest RFAJ 8.2.0.L1. We have been able to identify it as a problem coming from the new RbcsCharset implementation which returns shared charset decoder instead of creating a new instance. At first the charset decoder is not thread safe and cannot be shared. At second the way the shared charset decoder is created and shared breaks the memory model of Java (no volatile, no synchronization, just a free style).
We find the new RbcsCharset implementation broken, or?
Regards,
Michal
2020-12-03 11:35:12,968 [SessionANY.2 event handler] ERROR reuters.MMReutersRSSLConsumerProcess - Internal Reuters event queue error java.lang.IllegalStateException: Current state = RESET, new state = FLUSHED at java.nio.charset.CharsetDecoder.throwIllegalStateException(CharsetDecoder.java:996) ~[?:?] at java.nio.charset.CharsetDecoder.flush(CharsetDecoder.java:679) ~[?:?] at java.lang.StringCoding$StringDecoder.decode(StringCoding.java:213) ~[?:?] at java.lang.StringCoding.decode(StringCoding.java:252) ~[?:?] at java.lang.String.(String.java:484) ~[?:?] at com.reuters.rfa.internal.rwf.RwfUtil.createRBCS(Unknown Source) ~[rfa-8.2.0.L1.jar:8.2.0.L1.all] at com.reuters.rfa.internal.rwf.RwfDataBuffer.toString(Unknown Source) ~[rfa-8.2.0.L1.jar:8.2.0.L1.all] at com.reuters.rfa.internal.rwf.RwfStateReadOnly.getText(Unknown Source) ~[rfa-8.2.0.L1.jar:8.2.0.L1.all] at com.reuters.rfa.internal.rwf.RwfStateReadOnly.toString(Unknown Source) ~[rfa-8.2.0.L1.jar:8.2.0.L1.all] at com.cbksec.reuters.kit.omm.consumer.RKLoginItem.processEvent(RKLoginItem.java:239) ~[reuters-kit-4.6-20201203.085530-5.jar:4.6-SNAPSHOT / 2020-12-03 09:55:25 CET]
class RbcsCharset extends Charset { private CharsetDecoder _rbcsDecoder; public RbcsCharset() { super("RBCS", (String[])null); } public CharsetDecoder newDecoder() { if (this._rbcsDecoder == null) { this._rbcsDecoder = new RbcsCharsetDecoder(this); return this._rbcsDecoder; } else { this._rbcsDecoder.reset(); return this._rbcsDecoder; } }