Sorry if that is a slightly confusing title, but i will do my best to describe what is happening because i cant really figure it out.
I basically have a client/server. publish/subscribe model, with multiple clients communicating with a single server node. My client/server applications both use OSPL DDS as its data distribution service. My goal is to have the ability for a client application to come down, be re-opened, rejoin the participant group, and then receive all previously published topic data that the client subscribes to.
There is the background. Here is what I am seeing: I see no problems when I pass a maximum instance count of 1 in my DataReader->take() call. I can grab the 1 instance, no problem, data is not corrupt, everything works. as soon as i increase that maximum count to > 1, I get crashes whenever DDS tries to pass me more than 1 instance. I have run the program in GDB, and it appears to be crashing on the malloc() of some new type within DDS. With this knowledge, I ran the application with Valgrind (memory management debugger tool) to try to find where this memory issue was. The results came out like such (i see multiple of these errors, ~10 of each):
==26225== Invalid write of size 4 ==26225== at 0x40BFAD2: DDS::ccpp_SampleInfo_copyOut(gapi_sampleInfo_s const&, DDS::SampleInfo&) (in libdcpssacpp.so)
==26225== Invalid write of size 4 ==26225== at 0x40BFAA0: DDS::ccpp_TimeStamp_copyOut(gapi_time_t_s const&, DDS::Time_t&) (in libdcpssacpp.so)
==26225== Address 0x56FF9CC is 0 bytes after a block of size 60 alloc'd. <--- side note about this one. This error changes slightly each time it is printed. that 0 bytes increases each time its printed by 4, until 16, then starts to decrease.
I am at a loss at this point and am not really sure if it is something that I am not doing properly in my application or if it is an internal DDS problem... Does anyone have any thoughts?