-
Notifications
You must be signed in to change notification settings - Fork 85
Description
I haven't been able to narrow down the exact cause yet, but with 3.2.3-r8 I'm seeing seserialization issues. Not 100% of the time, but 100% reproducible. I'm trying to build a minimal example now that exposes the issue.
Has any one else seen this?
In this hard to read log where I filled the serialization/deserialization with debug:
foo main [foo.tokenUpdateProxy] readCpToken(): (154) m_pProxy->transferRequestFromApp(ETransferMessageId(uint16) msgId=ReadInitRequest=65333 (65333 <= 65535), UInt16 transactionIdentifier=55, ByteBuffer requestData=[])
foo commonapi OutputStream.hpp:97 writeValue<uint8_t>
foo commonapi OutputStream.hpp:487 _writeBitValue(val=0x5=5, nbits=8, is_signed=0)
foo commonapi OutputStream.hpp:107 writeValue<uint16_t>
foo commonapi OutputStream.hpp:487 _writeBitValue(val=0x37=55, nbits=16, is_signed=0)
foo commonapi OutputStream.hpp:487 _writeBitValue(val=0x0=0, nbits=32, is_signed=0)
foo commonapi callMethodWithReply REMOTE_ERROR!
bar commonapi InputStream.cpp:144 readValue<uint16_t>
bar commonapi InputStream.hpp:546 _readBitValue(65332, 16, 0), isLittleEndian=false
bar commonapi deserialize (2)
bar commonapi InputStream.cpp:144 readValue<uint16_t>
bar commonapi InputStream.hpp:546 _readBitValue(0, 16, 0), isLittleEndian=false
bar commonapi deserialize (2)
bar commonapi InputStream.cpp:337 readValue
bar commonapi InputStream.cpp:197 readValue
bar commonapi InputStream.hpp:546 _readBitValue(337, 32, 0), isLittleEndian=false
bar commonapi InputStream.hpp:559 _readBitValue failed sanity check: _bits = 32, remaining_ = 3 <? size_t(((_bits - 1) >> 3) + 1)=4
bar commonapi deserialize (1)
bar commonapi MethodWithReplyStubDispatcher (someip): deserialization failed! [0413:<bar.TokenUpdate>.22155.15500:<m:transferRequestFromApp>.64]
You can see that the 65333
is written as 5
This happens 100% at this call, but there are other calls where serialization/deserialization is fine.
One particular pattern that coordinates with this is when proxy calls are in callbacks (which emits a BLOCKING CALL AVAILABLITY
vsomeip warning)
i.e.
proxy->getProxyStatusEvent().subscribe(
[](auto const& /* availability_status */) {
proxy->someOtherCall();
}
);
this is a bad pattern and I'm trying to get rid of it anyways, BUT:
- This didn't cause problems with 3.2.0
- Fixing this doesn't resolve the deserialization issues, but my gut feeling is that it is somewhat related.
In the mean time, I've had to modify 3.2.0 to be compatible with vsomeip 3.4.10 and the 3.1.14 generators (basically change uid
/gid
for sec_client_t
)