[omniORB] local invocations

Stephen Davies chalky@null.net
Sat, 10 Nov 2001 00:14:51 +1100 (EST)


Not sure that this belongs in this thread/list, but anyway:

On Thu, 8 Nov 2001, Duncan Grisby wrote:

> For the real speed freaks (Hi Stefan and Stephen!) I've just checked
> in a shortcut mechanism for in-process colocated calls. This reduces

I have downloaded the cvs, this is the first time I tried omniORB4, and am
having some problems.

First off omniNames triggers assertion faults whenever a client tries to
use it: eg3_impl, nameclt list and the berlin server all cause this.
 file: callHandle.cc
 line: 127
 info: pd_localId
Cannot resolve the root context.
Have you set up the configuration file properly?

There is an error in the sample.cfg file: bootstrapAgentHostname should
not have quotes, as it does name lookups verbatim, including quotes, which
obviously fails (and caused me no end of headaches...)

To continue I reinstalled the omniORB3 .deb just so I had a nameService
running. Everything else still has paths/env vars set to use 4.0 and they
complain about the cfg file's version but that's okay.

The berlin C++ demo client causes another assertion fault:
 file: ../omniInternal.cc
 line: 634
 info: pof
Segmentation fault

To continue I ran the C++ demo client from an old omniorb3 build, which
works with the 4.0 berlin server okay (go corba!:)

The berlin server works fine (now that I have the nameService stuff
working), until I try using the shortcut poa. If I do, I get a lockup
waiting for a mutex. I'm not sure if I did it correctly, but I took the
code from the wiki and used the new shortcut_poa everywhere the rootpoa
was used previously, ignoring all issues with threading etc..

#0  0x409f7a0e in sigsuspend () from /lib/libc.so.6
#1  0x400f3629 in __pthread_wait_for_restart_signal ()
#2  0x400eff52 in pthread_cond_wait () from /lib/libpthread.so.0
#3  0x40aef6e6 in omni_condition::wait ()
#4  0x406b3e2b in omni_tracedcondition::wait ()
#5  0x406a68b0 in omni::omniOrbPOA::synchronise_request ()
#6  0x406a358e in omni::omniOrbPOA::dispatch ()
#7  0x40689bb8 in omniLocalIdentity::dispatch ()
#8  0x4069459f in omniObjRef::_invoke ()
#9  0x402612d3 in Warsaw::_objref_LayoutKit::create_stage ()
#10 0x08055eb1 in main ()

This is the first call into the object. There are only three other threads
running: a pthread manager, omniorb's socket listener and a berlin thread
pool manager. All three are idle doing their thing, not interfering with
the object in question. If I switch on all logging I get this:

[2.95727:0:layout]      About to create LayoutKit
omniORB: (0) Adding root/shortcut<33554432> (activating) to object table.
omniORB: (0) State root/shortcut<33554432> (activating) -> active
omniORB: (0) Creating ref to local: root/shortcut<33554432>
 target id      : IDL:Warsaw/Kit:1.0
 most derived id: IDL:Warsaw/LayoutKit:1.0
[2.95776:0:layout]      Created LayoutKit
omniORB: (0) POA for root/shortcut<33554432> (active) in HOLDING state;
waiting...

I noticed that not all objects were created in root/shortcut (I looked at
one and it calls _this() in the constructor, which I guess uses the root
poa). This is the first call into an object in the root/shortcut poa.

I tried to stepi through the layout->create_stage() call, and it went
through many many mutex locks/unlocks and other crap before I lost count.

On a brighter note, not using the shortcut seems marginally faster than
3.0, but only from memory (I didn't write down any numbers)

TIA,
Stephen

   //------=[ Chalky (Stephen Davies) -- Chalky@null.net ]=------\\
  //-----=[ Powered by Linux -- "Escape the Gates of Hell" ]=-----\\
 //----=[ CEED : Agilent Technologies - RouterTester Project ]=----\\
//-=[ Programmer(C/C++/Java) and 4th Year CSE/CS Student at RMIT ]=-\\