irix port of omniORB2?

John Dent denty@charmed.demon.co.uk
Wed, 11 Feb 1998 13:27:23 +0000


[Further to my previous email.]
I have been attempting to get the ORB working in IRIX with partial
success.
I have the name service and eg3_clt & _impl executables compiled and
linked.
The omniNames server starts up fine and begins to listen for
connections.
eg3_impl starts up fine, contacts the name service and listens for its
own connections.
Upon starting eg3_clt, it apparenly contacts the naming service,
resolves the name, contacts the object and executes it's greeting code
without hitches. The client then terminates without error exactly as it
would at home under Linux.
Once the eg3_clt has terminated, both the name service and the _impl
segfault.
They fault due to the ll_recv() call in relStream.cc:106 returning zero
(presumably to indicate there are no more bytes in the pipe).
Unfortunately, reliableStreamStrand::receive() does not realise this
error condition and simply retries the ll_recv() call, recusively,
eventually terminating with a segfault (presumably due to stack
overflow).
Here is the first part of the backtrace from gdb:
#3550 0x5afc60 in reliableStreamStrand::receive (this=0x100647b0,
size=12,
    exactly=0 '\000', align=8) at relStream.cc:106
#3551 0x5afc60 in reliableStreamStrand::receive (this=0x100647b0,
size=12,
    exactly=0 '\000', align=8) at relStream.cc:106
#3552 0x5afc60 in reliableStreamStrand::receive (this=0x100647b0,
size=12,
    exactly=0 '\000', align=8) at relStream.cc:106
#3553 0x5afc60 in reliableStreamStrand::receive (this=0x100647b0,
size=12,
    exactly=0 '\000', align=8) at relStream.cc:106
#3554 0x5afc60 in reliableStreamStrand::receive (this=0x100647b0,
size=12,
    exactly=0 '\000', align=8) at relStream.cc:106
#3555 0x5afc60 in reliableStreamStrand::receive (this=0x100647b0,
size=12,
    exactly=0 '\000', align=8) at relStream.cc:106
#3556 0x5afc60 in reliableStreamStrand::receive (this=0x100647b0,
size=12,
    exactly=0 '\000', align=8) at relStream.cc:106
#3557 0x5afc60 in reliableStreamStrand::receive (this=0x100647b0,
size=12,
    exactly=0 '\000', align=8) at relStream.cc:106
#3558 0x5afc60 in reliableStreamStrand::receive (this=0x100647b0,
size=12,
    exactly=0 '\000', align=8) at relStream.cc:106
#3559 0x5afc60 in reliableStreamStrand::receive (this=0x100647b0,
size=12,
    exactly=0 '\000', align=8) at relStream.cc:106
#3560 0x5afc60 in reliableStreamStrand::receive (this=0x100647b0,
size=12,
    exactly=0 '\000', align=8) at relStream.cc:106
#3561 0x50e8a0 in NetBufferedStream::receive (this=0x100ccf7c,
minimum=8,
    startMTU=1 '\001') at nbufferedStream.cc:287
#3562 0x516510 in NetBufferedStream::align_and_get_bytes
(this=0x100ccf7c, align=ALIGN_1,
    nbytes=8, startMTU=1 '\001') at
../../../include/omniORB2/bufferedStream.h:372
#3563 0x50d30c in NetBufferedStream::get_char_array (this=0x100ccf7c,
    b=0x100cd020 "GIOP\001", size=8, startMTU=1 '\001') at
nbufferedStream.cc:129
#3564 0x546c2c in GIOP_S::dispatcher (s=0x100647b0) at giopServer.cc:274

#3565 0x560bb8 in tcpSocketWorker::run (this=0x10064850, arg=0x100647b0)

    at tcpSocketMTfactory.cc:952
#3566 0x5bc670 in omni_thread_wrapper (ptr=0x10064850) at posix.cc:390
#3567 0xc28fa94 in _SGIPT_pt_start () at pt.c:713
(gdb)

Obviously I do not expect anyone to fix this for me... I would simply
like to know if there is any reason ll_recv should return zero... and,
perhaps, what could be done. Would throwing an exception be a good idea?

Thanks for your time,
denty.