[omniORB] Race condition in ORB_var initialization ?

Davide Rosso davidealessandro.rosso at gmail.com
Wed Mar 1 13:51:24 UTC 2023


Hello,
we are facing strange behaviour in one of our CORBA clients; the CORBA
client is a multithreaded C++ application in which each thread has an
instance of a class that contains a private ORB_var instance.
What happened is that one of the threads froze in the initialization phase:
killing the process with a -11 signal we examined the core dump in gdb and
found the following stack trace:

#0  0x00007fa9c605b54d in __lll_lock_wait () from /usr/lib64/libpthread.so.0
#1  0x00007fa9c6056e9b in _L_lock_883 () from /usr/lib64/libpthread.so.0
#2  0x00007fa9c6056d68 in pthread_mutex_lock () from
/usr/lib64/libpthread.so.0
#3  0x00007fa9c6522ab3 in CORBA::ORB::_nil() () from
/usr/lib64/libomniORB4.so.2
#4  0x0000000000d8a09e in ORB_var (this=0x7fa9940008c0) at
/usr/include/omniORB4/CORBA_vartypes.h:167
#5  Components::MarketServer::ClientInterface::ClientInterface
(this=0x7fa9940008c0) at ./CorbaFiles/CorbaClient.cpp:20
....

Looking at the OmniORB source code, we narrowed the cause to
the omni::nilRefLock() method:

omni_tracedmutex&
omni::nilRefLock()
{
  // We are safe just testing this here, as we guarentee that
  // it will be initialised during the static initialisation.
  // (Which is single-threaded).  If not by this method, then
  // by the static initialiser below.

  static omni_tracedmutex* nil_ref_lock = 0;

  *if( !nil_ref_lock )  nil_ref_lock = new
omni_tracedmutex("nil_ref_lock");*
  return *nil_ref_lock;
}

It seems that if the highlighted line is executed in parallel by tho
threads, one of the threads may end up with a pthread_mutex instance
that is corrupted and is never unlocked.

Not sure if this is a bug of the OmniORB library or a wrong initialization
of the ORB_var instance.
Any help will be appreciated.

Thanks and regards,
Davide Rosso
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.omniorb-support.com/pipermail/omniorb-list/attachments/20230301/47bed8f0/attachment.html>


More information about the omniORB-list mailing list