[omniORB] bidir problem ?

Fernando A. de Araujo Filho maverick@elogica.com.br
Mon Dec 2 13:41:01 2002


Hi, (sorry for BAD english),

I have made modifications in one program to supports OmniOrb4.
The same program, depending on its functionality, act as client or server.

I have implemented BIDIR policy with
     ...
     { "clientTransportRule",  "* unix,tcp,bidir" },
     { "serverTransportRule",  "* unix,tcp,bidir" },
     { "oneCallPerConnection", "0" },
     { "offerBiDirectionalGIOP", "1" },
     { "acceptBiDirectionalGIOP", "1" },
     ...
and
  pl.length(1);
  a <<= BiDirPolicy::BOTH;
  pl[0] = orb->create_policy(BiDirPolicy::BIDIRECTIONAL_POLICY_TYPE, a);
  poa = poaRef->create_POA("myBidirPolicy", pman, pl);
...

The first time my client narrow a reference to the server, everything works
fine. The client pass a callback
reference to the server, and both sides can invoke calls without any
problem, in BIDIR mode.
Good to bypass firewalls ...
The problem I have occurs when any side die. IE, if the server die and
restart, and the client
try to narrow a new T_var, I have a :

[2002-12-02 08:33:49][Information] - omniORB: LocateRequest to remote:
root<0>
[2002-12-02 08:33:49][Information] - omniORB: AsyncInvoker: thread id = 6
has exited. Total threads = 5
[2002-12-02 08:33:49][Information] - omniORB: AsyncInvoker: thread id = 8
has exited. Total threads = 4
[2002-12-02 08:33:59][Information] - omniORB: throw TRANSIENT from
giopRope.cc:321 (NO,TRANSIENT_CallTimedout)

If i dont apply BIDIR policy, and not offer and or accept BiDirectionalGIOP,
the problem not occurs.
Any side can die and restart without any problem.

The problem occurs when I have a BIDIR conection, and any side restarts.

I observed  in giopimpl12.cc the code below :
...
/*
  $Log: giopImpl12.cc,v $
  Revision 1.1.4.18  2002/11/26 16:54:35  dgrisby
  Fix exception interception.
 ...
// I suppose the "GIOP::CloseConnection" message is received
// when the other side is dying, in IIOP 1.2.
void
giopImpl12::unmarshalWildCardRequestHeader(giopStream* g) {
...
  case GIOP::CloseConnection:
    if (g->pd_strand->biDir) {
      // proper shutdown of a connection.
      // XXX what to do?
    }
    inputRaiseCommFailure(g);
    break;
 ...

I dont know if is related. In more then 20 days I have made dozens of
changes in my code, and does not work.
Alias, I allways redo my changes, because appears the rigth to me.

??????????? ~8() I am becaming crazy ;..;uhuhauhuauh :-) (Bjorn, be patient
:-))

I really needs help ...

thanks in advance,

Fernando A. de Araujo Filho
maverick@elogica.com.br