[omniORB] Clients don't reply ??

Miguel mmiguel@arrakis.es
Mon, 21 May 2001 21:03:33 +0200


Hello to everybody!!

I have a strange (at least for me :-D) problem with an application I'm 
implementing in Linux. In order to show you what's the
problem, I'll try to explain this application. I've something like:

server1
{
    orb->init
    register in Naming Service
    orb->run...
}

server2
{
    orb->init
    register in Naming Service
    contact with server1 and get its reference
    orb->run   // Many methods of this server contact with client1 and client2
}

client1
{
    main()
    {
       orb->init
       get reference to server2
       create thread
       orb->run      // This client is a server for another clients...
    }

    thread()
    {
        contact with server2
        contact server1 (through a reference passed by server2)
        contact with client2 (through a reference passed by server2)
    }
}

client2
{
    main()
    {
       orb->init
       create thread
       orb->run  // This client is a server for another clients, too
    }

    thread
    {
       contact with server2
       contact server1 (through a reference passed by server2)
       contact with client2 (through a reference passed by server2)
    }
}

(client1 and client2 are almost the same and the objects they register in 
the ORB are of the same type...)

If any client tries to communicate with any server, it works perfectly. The 
problem is when any object
(server1, server2, client1 or client2) tries to contact with any of the 
clients. For example:

from server1:   ref_client1->functionA() => server1 blocks and client1 
doesn't execute 'functionA' !!!

or

from client1:  ref_client2->functionZ()   => client1 blocks here and no 
excepcion or error message is sent... is like if
client2 isn't there, but the ORB doesn't "say" anything...

If I try to do something like:

from client1: ref_server1->functionB()

of

from client2: ref_server2->functionP()

it works perfectly!!

It's curious that the problem is in the processes that I have a thread for 
the ORB (the 'main' function) and other one for the "application".
Perhaps I'm using the same port for receiving and sending messages? I must 
say that for the threads I'm using
the omniORB thread implementation, and I think they work OK.

Ah!! Did I mention that this works ok in Windows?

I'm using omniORB 3.0.3 and Red Hat Linux 7.

Any idea/comment??

Thank you very much in advance...

Bye!!