Discussion:
[omniORB] Server dies when throwing exception after client connection closed on AIX
GrischaPaul
2007-04-12 19:12:59 UTC
Permalink
One of our applications is a CORBA-Server using OmniOrb (Version 405 and
407). We got it working on windows and several unix platforms, also on AIX
5.3, builded with VisualAge 5. On another AIX 5.3 machine we use VisualAge 8
with latest patches. On this machine our CORBA-Server aborts after two
minutes with segmentation fault inside code of a OmniOrb-library. In this
code an exception is thrown because of recognising an closed client
connection. Throwing an exception because of closed client connections is a
normal behaviour of OmniOrb, and it worked several times before in the same
run.


Last log message of OmniOrb is:


omniORB: (3) inputMessage: from giop:tcp:10.1.73.1:38786 12 bytes

omniORB: (3)

4749 4f50 0102 0005 0000 0000 GIOP........

2007-04-11 16:27:40.985599: CORBA::LOG omniORB: (3) throw
giopStream::CommFailure from
giopImpl12.cc:1275(0,NO,COMM_FAILURE_UnMarshalArguments)


Core file backtrace information:


Illegal instruction (illegal opcode) in . at 0x0 ($t5)

warning: Unable to access address 0x0 from core

(dbx) where

.() at 0x0

__DoThrowV6() at 0xd0838704

_raise__Q3_4omni10giopStream11CommFailureFUlQ2_5CORBA16CompletionStatusbPCcT1(0x41540004,
0x1, 0x0, 0xd459d30c, 0x4fb) at 0xd448ecc4

inputRaiseCommFailure__Q2_4omni10giopImpl12FPQ2_4omni10giopStream(0x201e8074)
at 0xd44c5208

unmarshalWildCardRequestHeader__Q2_4omni10giopImpl12FPQ2_4omni10giopStream(0x201e8074)
at 0xd44c8818

inputMessageBegin__Q2_4omni10giopImpl12FPQ2_4omni10giopStreamPFPQ2_4omni10giopStream_v(0x201e8074,
0xf138e14c) at 0xd44c91d0

dispatcher__Q2_4omni6GIOP_SFv(0x201e8070) at 0xd44cba5c

real_execute__Q2_4omni10giopWorkerFv(0x20127270) at 0xd4410be0

run__Q2_4omni14giopWorkerInfoFv(0x201e49d0) at 0xd4410d04

execute__Q2_4omni10giopWorkerFv(0x20127270) at 0xd4410d70

real_run__15omniAsyncWorkerFv(0x20127310) at 0xd4480c5c

run__19omniAsyncWorkerInfoFv(0x201e4b10) at 0xd44816a8

run__15omniAsyncWorkerFPv(0x20127310, 0x0) at 0xd4481714

omni_thread_wrapper(0x20127310) at 0xd1bb01dc


Core file backtrace information of debug-version of omniOrb libraries:


Segmentation fault in ptrgl._ptrgl [/usr/lib/libC.a] at 0x20920718 ($t5)

0x20920718 (_ptrgl) 800b0000 lwz r0,0x0(r11)

(dbx) where

ptrgl._ptrgl() at 0x20920718

__DoThrowV6() at 0x209228c4

_raise(unsigned long,CORBA::CompletionStatus,bool,const char*,unsigned
long)(0x41540004, 0x1, 0x0, 0x2019d84c, 0x4fb), line 538 in "giopStream.cc"

inputRaiseCommFailure(omni::giopStream*)(0x20c8d0d4), line 1273 in
"giopImpl12.cc"

unnamed block in
unmarshalWildCardRequestHeader(omni::giopStream*)(0x20c8d0d4), line 947 in
"giopImpl12.cc"

unmarshalWildCardRequestHeader(omni::giopStream*)(0x20c8d0d4), line 947 in
"giopImpl12.cc"

inputMessageBegin(omni::giopStream*,void(*)(omni::giopStream*))(0x20c8d0d4,
0x209c2a08), line 723 in "giopImpl12.cc"

dispatcher()(0x20c8d0d0), line 217 in "GIOP_S.cc"

unnamed block in real_execute()(0x20bcc2d0), line 212 in "giopWorker.cc"

real_execute()(0x20bcc2d0), line 212 in "giopWorker.cc"

run()(0x20c899d0), line 100 in "giopWorker.cc"

execute()(0x20bcc2d0), line 114 in "giopWorker.cc"

unnamed block in real_run()(0x20bcc370), line 182 in "invoker.cc"

real_run()(0x20bcc370), line 182 in "invoker.cc"

run()(0x20c89b00), line 229 in "invoker.cc"

run(void*)(0x20bcc370, 0x0), line 133 in "invoker.cc"

omni_thread_wrapper(0x20bcc370), line 451 in "posix.cc"


The same error occurs on our first AIX machine when running binaries
compiled on the second one with VisualAge 8.


OmniOrb binaries are compiled/linked with xlC_r using flags

-qstaticinline -qmaxmem=8192 -qlonglong -qlongdouble -lpthread

as it was configured by the configuration script without passing any special
parameters.


Our CORBA-Server is comiled/linked with xlC using flags

-O2 -D__aix__ -D__powerpc__ -D__OSVERSION__=4 -D_THREAD_SAFE -DTHREAD_SAFE
-DNDEBUG -D_REENTRANT -Wl,-brtl -lomniORB4 -lomniDynamic4 -lCOSDynamic4
-lCOS4 -lomnithread -ldl -lpthread


The error does no occur when compiling OmniOrb 405 with debug information
(-g) and compiling CORBA-Server without optimization (-O2). When using
OmniOrb 407 it works without using -g, but then it only runs on second AIX
machine.

I assume that playing with this flags just hides the error because of
different code generation, but produces no reliable code.


I would be thankfull for every hint or suggestion what else could be tried.
--
View this message in context: http://www.nabble.com/Server-dies-when-throwing-exception-after-client-connection-closed-on-AIX-tf3563836.html#a9954189
Sent from the OmniORB - User mailing list archive at Nabble.com.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.omniorb-support.com/pipermail/omniorb-list/attachments/20070412/cd377591/attachment.htm
GrischaPaul
2007-04-13 14:02:08 UTC
Permalink
Some guy from IMB-support knew the solution. When using VisualAge V8 and
linking to modules created by V5, a compiler flag -qeh=v5 will help, because
standart exception handling level in V8 is 6.
Post by GrischaPaul
One of our applications is a CORBA-Server using OmniOrb (Version 405 and
407). We got it working on windows and several unix platforms, also on AIX
5.3, builded with VisualAge 5. On another AIX 5.3 machine we use VisualAge
8 with latest patches. On this machine our CORBA-Server aborts after two
minutes with segmentation fault inside code of a OmniOrb-library. In this
code an exception is thrown because of recognising an closed client
connection. Throwing an exception because of closed client connections is
a normal behaviour of OmniOrb, and it worked several times before in the
same run.<br>
<br>
Last log message of OmniOrb is:<br>
<br>
omniORB: (3) inputMessage: from giop:tcp:10.1.73.1:38786 12 bytes<br>
omniORB: (3)<br>
4749 4f50 0102 0005 0000 0000 GIOP........<br>
2007-04-11 16:27:40.985599: CORBA::LOG omniORB: (3) throw
giopStream::CommFailure from
giopImpl12.cc:1275(0,NO,COMM_FAILURE_UnMarshalArguments)<br>
<br>
Core file backtrace information:<br>
<br>
Illegal instruction (illegal opcode) in . at 0x0 ($t5)<br>
warning: Unable to access address 0x0 from core<br>
(dbx) where<br>
.() at 0x0<br>
__DoThrowV6() at 0xd0838704<br>
_raise__Q3_4omni10giopStream11CommFailureFUlQ2_5CORBA16CompletionStatusbPCcT1(0x41540004,
0x1, 0x0, 0xd459d30c, 0x4fb) at 0xd448ecc4<br>
inputRaiseCommFailure__Q2_4omni10giopImpl12FPQ2_4omni10giopStream(0x201e8074)
at 0xd44c5208<br>
unmarshalWildCardRequestHeader__Q2_4omni10giopImpl12FPQ2_4omni10giopStream(0x201e8074)
at 0xd44c8818<br>
inputMessageBegin__Q2_4omni10giopImpl12FPQ2_4omni10giopStreamPFPQ2_4omni10giopStream_v(0x201e8074,
0xf138e14c) at 0xd44c91d0<br>
dispatcher__Q2_4omni6GIOP_SFv(0x201e8070) at 0xd44cba5c<br>
real_execute__Q2_4omni10giopWorkerFv(0x20127270) at 0xd4410be0<br>
run__Q2_4omni14giopWorkerInfoFv(0x201e49d0) at 0xd4410d04<br>
execute__Q2_4omni10giopWorkerFv(0x20127270) at 0xd4410d70<br>
real_run__15omniAsyncWorkerFv(0x20127310) at 0xd4480c5c<br>
run__19omniAsyncWorkerInfoFv(0x201e4b10) at 0xd44816a8<br>
run__15omniAsyncWorkerFPv(0x20127310, 0x0) at 0xd4481714<br>
omni_thread_wrapper(0x20127310) at 0xd1bb01dc<br>
<br>
Core file backtrace information of debug-version of omniOrb libraries:<br>
<br>
Segmentation fault in ptrgl._ptrgl [/usr/lib/libC.a] at 0x20920718
($t5)<br>
0x20920718 (_ptrgl) 800b0000 lwz r0,0x0(r11)<br>
(dbx) where<br>
ptrgl._ptrgl() at 0x20920718<br>
__DoThrowV6() at 0x209228c4<br>
_raise(unsigned long,CORBA::CompletionStatus,bool,const char*,unsigned
long)(0x41540004, 0x1, 0x0, 0x2019d84c, 0x4fb), line 538 in
"giopStream.cc"<br>
inputRaiseCommFailure(omni::giopStream*)(0x20c8d0d4), line 1273 in
"giopImpl12.cc"<br>
unnamed block in
unmarshalWildCardRequestHeader(omni::giopStream*)(0x20c8d0d4), line 947 in
"giopImpl12.cc"<br>
unmarshalWildCardRequestHeader(omni::giopStream*)(0x20c8d0d4), line 947 in
"giopImpl12.cc"<br>
inputMessageBegin(omni::giopStream*,void(*)(omni::giopStream*))(0x20c8d0d4,
0x209c2a08), line 723 in "giopImpl12.cc"<br>
dispatcher()(0x20c8d0d0), line 217 in "GIOP_S.cc"<br>
unnamed block in real_execute()(0x20bcc2d0), line 212 in
"giopWorker.cc"<br>
real_execute()(0x20bcc2d0), line 212 in "giopWorker.cc"<br>
run()(0x20c899d0), line 100 in "giopWorker.cc"<br>
execute()(0x20bcc2d0), line 114 in "giopWorker.cc"<br>
unnamed block in real_run()(0x20bcc370), line 182 in "invoker.cc"<br>
real_run()(0x20bcc370), line 182 in "invoker.cc"<br>
run()(0x20c89b00), line 229 in "invoker.cc"<br>
run(void*)(0x20bcc370, 0x0), line 133 in "invoker.cc"<br>
omni_thread_wrapper(0x20bcc370), line 451 in "posix.cc"<br>
<br>
The same error occurs on our first AIX machine when running binaries
compiled on the second one with VisualAge 8.<br>
<br>
OmniOrb binaries are compiled/linked with xlC_r using flags <br>
-qstaticinline -qmaxmem=8192 -qlonglong -qlongdouble -lpthread<br>
as it was configured by the configuration script without passing any
special parameters.<br>
<br>
Our CORBA-Server is comiled/linked with xlC using flags <br>
-O2 -D__aix__ -D__powerpc__ -D__OSVERSION__=4 -D_THREAD_SAFE -DTHREAD_SAFE
-DNDEBUG -D_REENTRANT -Wl,-brtl -lomniORB4 -lomniDynamic4 -lCOSDynamic4
-lCOS4 -lomnithread -ldl -lpthread<br>
<br>
The error does no occur when compiling OmniOrb 405 with debug information
(-g) and compiling CORBA-Server without optimization (-O2). When using
OmniOrb 407 it works without using -g, but then it only runs on second AIX
machine. <br>
I assume that playing with this flags just hides the error because of
different code generation, but produces no reliable code.<br>
<br>
I would be thankfull for every hint or suggestion what else could be tried.
--
View this message in context: http://www.nabble.com/Server-dies-when-throwing-exception-after-client-connection-closed-on-AIX-tf3563836.html#a9974532
Sent from the OmniORB - User mailing list archive at Nabble.com.
Loading...