Writes blocking even when max_blocking_time is zero

1 post / 0 new
Offline
Last seen: 5 years 3 weeks ago
Joined: 06/30/2016
Posts: 3
Writes blocking even when max_blocking_time is zero

Hello

In our system where we use KeepLastReliable.TransientLocal data writers, we've observed the DDS write calls sometimes block for several seconds even though we have configured max_blocking_time to zero.

Trying to get the stack trace of thread that is blocking, I've seen two different variations:

#0 0x76d4a334 in __lll_lock_wait (futex=futex@entry=0x40bf9a4, private=0) at .../lowlevellock.c:46
#1 0x76d428bc in __GI___pthread_mutex_lock (mutex=0x40bf9a4) at .../pthread_mutex_lock.c:80
#2 0x7648b618 in RTIOsapiSemaphore_take () from .../libnddscore.so
#3 0x764651c0 in REDAWorker_enterExclusiveArea () from .../libnddscore.so
#4 0x7646871c in REDACursor_modifyReadWriteArea () from .../libnddscore.so
#5 0x76107e0c in PRESPsWriter_writeInternal () from .../libnddscore.so
#6 0x767eea14 in DDS_DataWriter_write_untyped_generalI () from .../libnddsc.so
#7 0x76bfb0d8 in DDSDataWriter_impl::write_untypedI(void const*, PRESInstanceHandle const&) ()
 from .../libnddscpp.so

and

#0 0x76dc4d40 in __libc_sendmsg (fd=35, msg=0x7e9d542c, flags=0) at .../sendmsg.c:28
#1 0x763c707c in NDDS_Transport_UDP_sendToMultipleSockets () from .../libnddscore.so
#2 0x763c97bc in NDDS_Transport_UDP_send () from .../libnddscore.so
#3 0x763b32e8 in RTINetioSender_send () from .../libnddscore.so
#4 0x76397c38 in MIGGeneratorContext_flush () from .../libnddscore.so
#5 0x763a2a0c in MIGGenerator_finishMessage () from .../libnddscore.so
#6 0x76369a44 in COMMENDSrWriterService_write () from .../libnddscore.so
#7 0x76168f38 in PRESPsWriter_writeCommend () from .../libnddscore.so
#8 0x761842e0 in PRESPsWriter_writeInternal () from .../libnddscore.so
#9 0x76867a14 in DDS_DataWriter_write_untyped_generalI () from .../libnddsc.so
#10 0x76c740d8 in DDSDataWriter_impl::write_untypedI(void const*, PRESInstanceHandle const&) ()
 from .../libnddscpp.so

What is causing this blocking behavior, and is there any way to avoid it for example through using some Qos parameters? We are using RTI DDS 5.3.0.