Skip to main content

VBC 4.5 - Client process hanging in DSUser call

  • February 16, 2013
  • 0 replies
  • 0 views

Problem:

  • Product Name: VisiBroker for C
  • Product Version: 4.5
  • Product Component: ORB, DSUser
  • Platform/OS Version: All

Client process occasionally hangs on a corba call. When this happens, the Client process consumes a lot of cpu cycles in a wait loop. The Client process is not using the Osagent. Below is stack trace of Client process when this high cpu usage happens:

(gdb) bt
#0 0xc7da4288 in VISCondition::wait ()
from /sms/smsapp/vbroker/vbcpp45/lib/liborb_r.sl
#1 0xc7da43bc in DSUser::open ()
from /sms/smsapp/vbroker/vbcpp45/lib/liborb_r.sl
#2 0xc7da2070 in DSUser::instance ()
from /sms/smsapp/vbroker/vbcpp45/lib/liborb_r.sl
#3 0xc7e02b04 in VISLocation::_lookup ()
from /sms/smsapp/vbroker/vbcpp45/lib/liborb_r.sl
#4 0xc7e03d2c in VISLocation::locate ()
from /sms/smsapp/vbroker/vbcpp45/lib/liborb_r.sl
#5 0xc7e0411c in VISLocation::relocate ()
from /sms/smsapp/vbroker/vbcpp45/lib/liborb_r.sl
#6 0xc7e06244 in VISLocation::bind_failed ()
from /sms/smsapp/vbroker/vbcpp45/lib/liborb_r.sl
#7 0xc7e8652c in VISChainBindInterceptor::bind_failed ()
from /sms/smsapp/vbroker/vbcpp45/lib/liborb_r.sl
#8 0xc7e774c0 in VISDelegate::_bind ()
from /sms/smsapp/vbroker/vbcpp45/lib/liborb_r.sl
#9 0xc7e7a500 in VISDelegate::_verify_connection ()
from /sms/smsapp/vbroker/vbcpp45/lib/liborb_r.sl
#10 0xc7e7b368 in VISDelegate::is_local ()
from /sms/smsapp/vbroker/vbcpp45/lib/liborb_r.sl
#11 0xc7f76f98 in CORBA_Object::_is_local ()
from /sms/smsapp/vbroker/vbcpp45/lib/liborb_r.sl
#12 0x116e54 in EPProv::SProcIntf::interrogateSub (this=0x401bf8f0,
_arg_inData=@0x74141124, _arg_outData={__ptr = @0x74141120})
...

Resolution:

The DSUser class in a VisiBroker process is used for communication with the Osagent.

By default, a VisiBroker process will look for an Osagent. Even though the Client initially does not use
Osagent to get Server object references, the Client will try to rebind through the Osagent if it could not
connect to the Server object it currently has.

The stack trace in description shows that the Client process is attempting to re-locate a Server object,
and in this process is attempting to find the Server object through the Osagent.

So if the VisiBroker process is not supposed to be using Osagent, then please start the VisiBroker process with the following property to disable lookup for an Osagent:

Client -Dvbroker.agent.enableLocator=false

 

#Security
#VisiBroker