[omniORB] Help System Exception
Andrew Mak
makwha@stee.com.sg
Mon Jul 15 08:59:01 2002
--=====================_9926533==_.ALT
Content-Type: text/plain; charset="us-ascii"; format=flowed
Hi All,
I hope someone else has encountered this problem or know how to solve it!!
I really don't know why this exception is thrown. Here I go. So far we've
debugged it down to here:
BTW I am using Win NT 4 Sp6a VC5, OmniOrb v3.04.
When the invoke function is called (below
omniObjRef.cc), _identity()->dispatch(call_desc); will throw out an
exception. In the dispatch function found in (below
remoteIdentity.cc) switch( giop_c.ReceiveReply() ). In this statement
ReceiveReply() (below giopClient.cc), the exception thrown is: (it's scary
as the comment is // never reaches here and I can get there!)
CORBA::ULong rc;
rc <<= *this;
switch (rc) {
case GIOP::SYSTEM_EXCEPTION:
{
UnMarshallSystemException();
// never reaches here
}
break;
The value of RC = 2 which is case GIOP::SYSTEM_EXCEPTION: . After which it
calls the UnMarshallSystemException();
--------------------------------------------------------------------------------------------------------------------------
omniObjRef.cc
--------------------------------------------------------------------------------------------------------------------------
void
omniObjRef::_invoke(omniCallDescriptor& call_desc, CORBA::Boolean do_assert)
{
int retries = 0;
#if defined(__DECCXX) && __DECCXX_VER < 60300000
// Work-around for bug in Compaq C++ optimiser
volatile
#endif
int fwd;
if( _is_nil() ) _CORBA_invoked_nil_objref();
#ifndef EGCS_WORKAROUND
_again:
#else
while(1) {
#endif
if( omniORB::verifyObjectExistsAndType && do_assert )
_assertExistsAndTypeVerified();
try{
omni::internalLock->lock();
fwd = pd_flags.forward_location;
_identity()->dispatch(call_desc);
return;
}
catch(CORBA::COMM_FAILURE& ex) {
if( fwd ) {
omni::revertToOriginalProfile(this);
CORBA::TRANSIENT ex2(ex.minor(), ex.completed());
if( !_omni_callTransientExceptionHandler(this, retries++, ex2) )
throw ex2;
}
else if( !_omni_callCommFailureExceptionHandler(this, retries++, ex) )
throw;
}
catch(CORBA::TRANSIENT& ex) {
if( !_omni_callTransientExceptionHandler(this, retries++, ex) )
throw;
}
catch(CORBA::OBJECT_NOT_EXIST& ex) {
if( fwd ){
omni::revertToOriginalProfile(this);
CORBA::TRANSIENT ex2(ex.minor(), ex.completed());
if( !_omni_callTransientExceptionHandler(this, retries++, ex2) )
throw ex2;
}
else if( !_omni_callSystemExceptionHandler(this, retries++, ex) )
throw;
}
catch(CORBA::SystemException& ex) {
if( !_omni_callSystemExceptionHandler(this, retries++, ex) )
throw;
}
catch(omniORB::LOCATION_FORWARD& ex) {
if( CORBA::is_nil(ex.get_obj()) ) {
CORBA::COMM_FAILURE ex2(0, CORBA::COMPLETED_NO);
if( omniORB::traceLevel > 10 ){
omniORB::log << "Received GIOP::LOCATION_FORWARD message that"
" contains a nil object reference.\n";
omniORB::log.flush();
}
if( !_omni_callCommFailureExceptionHandler(this, retries++, ex2) )
throw ex2;
}
omni::locationForward(this, ex.get_obj()->_PR_getobj());
}
#ifndef EGCS_WORKAROUND
goto _again;
#else
}
#endif
}
--------------------------------------------------------------------------------------------------------------------------
end - omniObjRef.cc
--------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------
remoteIdenity.cc
--------------------------------------------------------------------------------------------------------------------------
void
omniRemoteIdentity::dispatch(omniCallDescriptor& call_desc)
{
ASSERT_OMNI_TRACEDMUTEX_HELD(*omni::internalLock, 1);
omniRemoteIdentity_RefHolder rh(this);
if( omniORB::traceInvocations ) {
omniORB::logger l;
l << "Invoke '" << call_desc.op() << "' on remote: " << this << '\n';
}
CORBA::Boolean reuse = 0; //?? move this up into transport
const omniCallDescriptor::ContextInfo* ctxt_info = call_desc.context_info();
try {
GIOP_C giop_c(rope());
reuse = giop_c.isReUsingExistingConnection();
// Calculate the size of the message.
CORBA::ULong msgsize =
GIOP_C::RequestHeaderSize(keysize(), call_desc.op_len());
msgsize = call_desc.alignedSize(msgsize);
if( ctxt_info )
msgsize = omniDynamicLib::ops->context_aligned_size(msgsize,
ctxt_info->context,
ctxt_info->expected,
ctxt_info->num_expected);
giop_c.InitialiseRequest(key(), keysize(), call_desc.op(),
call_desc.op_len(), msgsize,
call_desc.is_oneway());
// Marshal the arguments to the operation.
call_desc.marshalArguments(giop_c);
if( ctxt_info )
omniDynamicLib::ops->marshal_context(giop_c, ctxt_info->context,
ctxt_info->expected,
ctxt_info->num_expected);
// Wait for the reply.
switch( giop_c.ReceiveReply() ) {
case GIOP::NO_EXCEPTION:
// Unmarshal any result and out/inout arguments.
call_desc.unmarshalReturnedValues(giop_c);
giop_c.RequestCompleted();
break;
case GIOP::USER_EXCEPTION:
{
// Retrieve the Interface Repository ID of the exception.
CORBA::ULong repoIdLen;
repoIdLen <<= giop_c;
if( repoIdLen > giop_c.RdMessageUnRead() )
OMNIORB_THROW(MARSHAL,0, CORBA::COMPLETED_MAYBE);
CORBA::String_var repoId(omni::allocString(repoIdLen - 1));
giop_c.get_char_array((CORBA::Char*)(char*) repoId, repoIdLen);
call_desc.userException(giop_c, repoId);
// Never get here - this must throw either a user exception
// or CORBA::MARSHAL.
OMNIORB_ASSERT(0);
}
case GIOP::LOCATION_FORWARD:
{
CORBA::Object_var obj(CORBA::Object::_unmarshalObjRef(giop_c));
giop_c.RequestCompleted();
throw omniORB::LOCATION_FORWARD(obj._retn());
}
case GIOP::SYSTEM_EXCEPTION:
OMNIORB_ASSERT(0);
break;
}
}
catch(omniConnectionBroken& ex) {
if( reuse ){
CORBA::TRANSIENT ex2(ex.minor(), ex.completed());
throw ex2;
}
else {
OMNIORB_THROW(COMM_FAILURE, ex.minor(), ex.completed());
}
}
}
--------------------------------------------------------------------------------------------------------------------------
end - remoteIdenity.cc
--------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------
giopClient.cc
--------------------------------------------------------------------------------------------------------------------------
GIOP::ReplyStatusType
GIOP_C::ReceiveReply()
{
if (pd_state != GIOP_C::RequestInProgress)
throw omniORB::fatalException(__FILE__,__LINE__,
"GIOP_C::ReceiveReply() entered with the wrong state.");
if (WrMessageSpaceLeft())
throw omniORB::fatalException(__FILE__,__LINE__,
"GIOP_C::ReceiveReply() reported wrong request message size.");
pd_state = GIOP_C::WaitingForReply;
flush(1);
if (!pd_response_expected) {
pd_state = GIOP_C::ReplyIsBeingProcessed;
return GIOP::NO_EXCEPTION;
}
RdMessageSize(0,omni::myByteOrder);
MessageHeader::HeaderType hdr;
get_char_array((CORBA::Char*) hdr, sizeof(MessageHeader::HeaderType),
omni::ALIGN_1, 1);
pd_state = GIOP_C::ReplyIsBeingProcessed;
if (hdr[0] != MessageHeader::Reply[0] ||
hdr[1] != MessageHeader::Reply[1] ||
hdr[2] != MessageHeader::Reply[2] ||
hdr[3] != MessageHeader::Reply[3] ||
hdr[4] != MessageHeader::Reply[4] ||
hdr[5] != MessageHeader::Reply[5] ||
hdr[7] != MessageHeader::Reply[7])
{
// Wrong header
setStrandIsDying();
OMNIORB_THROW_CONNECTION_BROKEN(0,CORBA::COMPLETED_MAYBE);
}
CORBA::ULong msgsize;
msgsize <<= *this;
if (hdr[6] != omni::myByteOrder) {
msgsize = ((((msgsize) & 0xff000000) >> 24) |
(((msgsize) & 0x00ff0000) >> 8) |
(((msgsize) & 0x0000ff00) << 8) |
(((msgsize) & 0x000000ff) << 24));
}
if (msgsize > MaxMessageSize()) {
// message size has exceeded the limit
setStrandIsDying();
OMNIORB_THROW_CONNECTION_BROKEN(0,CORBA::COMPLETED_MAYBE);
}
RdMessageSize(msgsize,hdr[6]);
// XXX Do not support any service context yet,
// XXX For the moment, skips the service context
CORBA::ULong svcccount;
CORBA::ULong svcctag;
CORBA::ULong svcctxtsize;
svcccount <<= *this;
while (svcccount-- > 0) {
svcctag <<= *this;
svcctxtsize <<= *this;
skip(svcctxtsize);
};
CORBA::ULong req_id;
req_id <<= *this;
if (req_id != pd_request_id) {
// Not the expected reply, skip the entire message
skip(RdMessageUnRead(),1);
pd_state = GIOP_C::RequestInProgress;
return this->ReceiveReply();
}
CORBA::ULong rc;
rc <<= *this;
switch (rc) {
case GIOP::SYSTEM_EXCEPTION:
{
UnMarshallSystemException();
// never reaches here
}
break;
case GIOP::NO_EXCEPTION:
case GIOP::USER_EXCEPTION:
case GIOP::LOCATION_FORWARD:
break;
default:
// Should never receive anything other that the above
// Same treatment as wrong header
setStrandIsDying();
OMNIORB_THROW_CONNECTION_BROKEN(0,CORBA::COMPLETED_MAYBE);
}
return (GIOP::ReplyStatusType)rc;
}
--------------------------------------------------------------------------------------------------------------------------
end - giopClient.cc
--------------------------------------------------------------------------------------------------------------------------
Best Regards
/\ |\ /|
/--\ndrew | \/ |ak
/ \ | |
Senior Engineer
Singapore Technologies Electronics Ltd
Product Development & Management Division (PDMD)
Large-Scale Systems Group
(65) 6413 1613 (Direct)
(65) 6484 8841 (Fax)
mailto:makwha@stee.st.com.sg
www.stee.com.sg
--=====================_9926533==_.ALT
Content-Type: text/html; charset="us-ascii"
<html>
Hi All,<br><br>
I hope someone else has encountered this problem or know how to solve
it!! I really don't know why this exception is thrown. Here I go. So far
we've debugged it down to here:<br><br>
BTW I am using Win NT 4 Sp6a VC5, OmniOrb v3.04.<br><br>
When the invoke function is called (below omniObjRef.cc),
<font color="#FF0000"> _identity()->dispatch(call_desc);
</font>will throw out an exception. In the dispatch function found
in (below remoteIdentity.cc) <font color="#FF0000"> switch(
giop_c.ReceiveReply() </font>). In this statement ReceiveReply() (below
giopClient.cc), the exception thrown is: (it's scary as the comment is
<font color="#FF0000"> // never reaches here </font>and I can get
there!)<br><br>
<font color="#FF0000">CORBA::ULong rc;<br>
rc <<= *this;<br>
switch (rc) {<br>
case GIOP::SYSTEM_EXCEPTION:<br>
{<br>
UnMarshallSystemException();<br>
// never reaches here<br>
}<br>
break;<br><br>
</font>The value of RC = 2 which is <font color="#FF0000">case
GIOP::SYSTEM_EXCEPTION: </font>. After which it calls the
<font color="#FF0000">UnMarshallSystemException(); <br><br>
<br>
</font>--------------------------------------------------------------------------------------------------------------------------<br>
omniObjRef.cc<br>
--------------------------------------------------------------------------------------------------------------------------<br>
void<br>
omniObjRef::_invoke(omniCallDescriptor& call_desc, CORBA::Boolean
do_assert)<br>
{<br>
int retries = 0;<br>
#if defined(__DECCXX) && __DECCXX_VER < 60300000<br>
// Work-around for bug in Compaq C++ optimiser<br>
volatile<br>
#endif<br>
int fwd;<br>
if( _is_nil() ) _CORBA_invoked_nil_objref();<br>
#ifndef EGCS_WORKAROUND<br>
_again:<br>
#else<br>
while(1) {<br>
#endif<br>
if( omniORB::verifyObjectExistsAndType &&
do_assert )<br>
_assertExistsAndTypeVerified();<br>
try{<br>
omni::internalLock->lock();<br>
fwd = pd_flags.forward_location;<br>
<font color="#FF0000">
_identity()->dispatch(call_desc);<br>
</font> return;<br>
}<br>
catch(CORBA::COMM_FAILURE& ex) {<br>
if( fwd ) {<br>
<x-tab> </x-tab>omni::revertToOriginalProfile(this);<br>
<x-tab> </x-tab>CORBA::TRANSIENT
ex2(ex.minor(), ex.completed());<br>
<x-tab> </x-tab>if(
!_omni_callTransientExceptionHandler(this, retries++, ex2) )<br>
<x-tab> </x-tab>
throw ex2;<br>
}<br>
else if(
!_omni_callCommFailureExceptionHandler(this, retries++, ex) )<br>
<x-tab> </x-tab>throw;<br>
}<br>
catch(CORBA::TRANSIENT& ex) {<br>
if(
!_omni_callTransientExceptionHandler(this, retries++, ex) )<br>
<x-tab> </x-tab>throw;<br>
}<br>
catch(CORBA::OBJECT_NOT_EXIST& ex) {<br>
if( fwd ){<br>
<x-tab> </x-tab>omni::revertToOriginalProfile(this);<br>
<x-tab> </x-tab>CORBA::TRANSIENT
ex2(ex.minor(), ex.completed());<br>
<x-tab> </x-tab>if(
!_omni_callTransientExceptionHandler(this, retries++, ex2) )<br>
<x-tab> </x-tab>
throw ex2;<br>
}<br>
else if(
!_omni_callSystemExceptionHandler(this, retries++, ex) )<br>
<x-tab> </x-tab>throw;<br>
}<br>
catch(CORBA::SystemException& ex) {<br>
if(
!_omni_callSystemExceptionHandler(this, retries++, ex) )<br>
<x-tab> </x-tab>throw;<br>
}<br>
catch(omniORB::LOCATION_FORWARD& ex) {<br>
if( CORBA::is_nil(ex.get_obj()) ) {<br>
<x-tab> </x-tab>CORBA::COMM_FAILURE
ex2(0, CORBA::COMPLETED_NO);<br>
<x-tab> </x-tab>if(
omniORB::traceLevel > 10 ){<br>
<x-tab> </x-tab>
omniORB::log << "Received GIOP::LOCATION_FORWARD message
that"<br>
<x-tab> </x-tab>
" contains a nil object reference.\n";<br>
<x-tab> </x-tab>
omniORB::log.flush();<br>
<x-tab> </x-tab>}<br>
<x-tab> </x-tab>if(
!_omni_callCommFailureExceptionHandler(this, retries++, ex2) )<br>
<x-tab> </x-tab>
throw ex2;<br>
}<br>
omni::locationForward(this,
ex.get_obj()->_PR_getobj());<br>
}<br>
#ifndef EGCS_WORKAROUND<br>
goto _again;<br>
#else<br>
}<br>
#endif<br>
}<br>
--------------------------------------------------------------------------------------------------------------------------<br>
end - omniObjRef.cc<br>
--------------------------------------------------------------------------------------------------------------------------<br><br>
--------------------------------------------------------------------------------------------------------------------------<br>
remoteIdenity.cc<br>
--------------------------------------------------------------------------------------------------------------------------<br>
void<br>
omniRemoteIdentity::dispatch(omniCallDescriptor& call_desc)<br>
{<br>
ASSERT_OMNI_TRACEDMUTEX_HELD(*omni::internalLock, 1);<br>
omniRemoteIdentity_RefHolder rh(this);<br>
if( omniORB::traceInvocations ) {<br>
omniORB::logger l;<br>
l << "Invoke '" <<
call_desc.op() << "' on remote: " << this <<
'\n';<br>
}<br>
CORBA::Boolean reuse = 0; //?? move this up into transport<br>
const omniCallDescriptor::ContextInfo* ctxt_info =
call_desc.context_info();<br>
try {<br>
GIOP_C giop_c(rope());<br>
reuse = giop_c.isReUsingExistingConnection();<br>
// Calculate the size of the message.<br>
CORBA::ULong msgsize =<br>
GIOP_C::RequestHeaderSize(keysize(),
call_desc.op_len());<br>
msgsize = call_desc.alignedSize(msgsize);<br>
if( ctxt_info )<br>
msgsize =
omniDynamicLib::ops->context_aligned_size(msgsize,<br>
<x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab>
ctxt_info->context,<br>
<x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab>
ctxt_info->expected,<br>
<x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab>
ctxt_info->num_expected);<br>
giop_c.InitialiseRequest(key(), keysize(),
call_desc.op(),<br>
<x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab>
call_desc.op_len(), msgsize,<br>
<x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab>
call_desc.is_oneway());<br>
// Marshal the arguments to the operation.<br>
call_desc.marshalArguments(giop_c);<br>
if( ctxt_info )<br>
omniDynamicLib::ops->marshal_context(giop_c,
ctxt_info->context,<br>
<x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab>
ctxt_info->expected,<br>
<x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab><x-tab> </x-tab>
ctxt_info->num_expected);<br>
// Wait for the reply.<br>
<font color="#FF0000"> switch( giop_c.ReceiveReply() )
{<br>
case GIOP::NO_EXCEPTION:<br>
// Unmarshal any result and out/inout
arguments.<br>
call_desc.unmarshalReturnedValues(giop_c);<br>
giop_c.RequestCompleted();<br>
break;<br>
</font> case GIOP::USER_EXCEPTION:<br>
{<br>
<x-tab> </x-tab>//
Retrieve the Interface Repository ID of the exception.<br>
<x-tab> </x-tab>CORBA::ULong
repoIdLen;<br>
<x-tab> </x-tab>repoIdLen
<<= giop_c;<br>
<x-tab> </x-tab>if(
repoIdLen > giop_c.RdMessageUnRead() )<br>
<x-tab> </x-tab>
OMNIORB_THROW(MARSHAL,0, CORBA::COMPLETED_MAYBE);<br>
<x-tab> </x-tab>CORBA::String_var
repoId(omni::allocString(repoIdLen - 1));<br>
<x-tab> </x-tab>giop_c.get_char_array((CORBA::Char*)(char*)
repoId, repoIdLen);<br>
<x-tab> </x-tab>call_desc.userException(giop_c,
repoId);<br>
<x-tab> </x-tab>// Never
get here - this must throw either a user exception<br>
<x-tab> </x-tab>// or
CORBA::MARSHAL.<br>
<x-tab> </x-tab>OMNIORB_ASSERT(0);<br>
}<br>
case GIOP::LOCATION_FORWARD:<br>
{<br>
<x-tab> </x-tab>CORBA::Object_var
obj(CORBA::Object::_unmarshalObjRef(giop_c));<br>
<x-tab> </x-tab>giop_c.RequestCompleted();<br>
<x-tab> </x-tab>throw
omniORB::LOCATION_FORWARD(obj._retn());<br>
}<br>
case GIOP::SYSTEM_EXCEPTION:<br>
OMNIORB_ASSERT(0);<br>
break;<br>
}<br>
}<br>
catch(omniConnectionBroken& ex) {<br>
if( reuse ){<br>
CORBA::TRANSIENT ex2(ex.minor(),
ex.completed());<br>
throw ex2;<br>
}<br>
else {<br>
OMNIORB_THROW(COMM_FAILURE, ex.minor(),
ex.completed());<br>
}<br>
}<br>
}<br><br>
--------------------------------------------------------------------------------------------------------------------------<br>
end - remoteIdenity.cc<br>
--------------------------------------------------------------------------------------------------------------------------<br><br>
--------------------------------------------------------------------------------------------------------------------------<br>
giopClient.cc<br>
--------------------------------------------------------------------------------------------------------------------------<br><br>
GIOP::ReplyStatusType <br>
GIOP_C::ReceiveReply()<br>
{<br>
if (pd_state != GIOP_C::RequestInProgress)<br>
throw omniORB::fatalException(__FILE__,__LINE__,<br>
"GIOP_C::ReceiveReply() entered with
the wrong state.");<br>
if (WrMessageSpaceLeft())<br>
throw omniORB::fatalException(__FILE__,__LINE__,<br>
"GIOP_C::ReceiveReply()
reported wrong request message size.");<br>
pd_state = GIOP_C::WaitingForReply;<br>
flush(1);<br>
if (!pd_response_expected) {<br>
pd_state = GIOP_C::ReplyIsBeingProcessed;<br>
return GIOP::NO_EXCEPTION;<br>
}<br>
<br>
RdMessageSize(0,omni::myByteOrder);<br>
MessageHeader::HeaderType hdr;<br>
get_char_array((CORBA::Char*) hdr,
sizeof(MessageHeader::HeaderType),<br>
<x-tab> </x-tab><x-tab> </x-tab>
omni::ALIGN_1, 1);<br>
pd_state = GIOP_C::ReplyIsBeingProcessed;<br>
if (hdr[0] != MessageHeader::Reply[0] ||<br>
hdr[1] != MessageHeader::Reply[1] ||<br>
hdr[2] != MessageHeader::Reply[2] ||<br>
hdr[3] != MessageHeader::Reply[3] ||<br>
hdr[4] != MessageHeader::Reply[4] ||<br>
hdr[5] != MessageHeader::Reply[5] ||<br>
hdr[7] != MessageHeader::Reply[7])<br>
{<br>
// Wrong header<br>
setStrandIsDying();<br>
OMNIORB_THROW_CONNECTION_BROKEN(0,CORBA::COMPLETED_MAYBE);<br>
}<br>
CORBA::ULong msgsize;<br>
msgsize <<= *this;<br>
if (hdr[6] != omni::myByteOrder) {<br>
msgsize = ((((msgsize) & 0xff000000) >> 24) | <br>
<x-tab> </x-tab><x-tab> </x-tab>(((msgsize) & 0x00ff0000) >> 8) | <br>
<x-tab> </x-tab><x-tab> </x-tab>(((msgsize) & 0x0000ff00) << 8) | <br>
<x-tab> </x-tab><x-tab> </x-tab>(((msgsize) & 0x000000ff) << 24));<br>
}<br>
if (msgsize > MaxMessageSize()) {<br>
// message size has exceeded the limit<br>
setStrandIsDying();<br>
OMNIORB_THROW_CONNECTION_BROKEN(0,CORBA::COMPLETED_MAYBE);<br>
}<br>
RdMessageSize(msgsize,hdr[6]);<br>
// XXX Do not support any service context yet, <br>
// XXX For the moment, skips the service context<br>
CORBA::ULong svcccount;<br>
CORBA::ULong svcctag;<br>
CORBA::ULong svcctxtsize;<br>
svcccount <<= *this;<br>
while (svcccount-- > 0) {<br>
svcctag <<= *this;<br>
svcctxtsize <<= *this;<br>
skip(svcctxtsize);<br>
};<br>
CORBA::ULong req_id;<br>
req_id <<= *this;<br>
if (req_id != pd_request_id) {<br>
// Not the expected reply, skip the entire message<br>
skip(RdMessageUnRead(),1);<br>
pd_state = GIOP_C::RequestInProgress;<br>
return this->ReceiveReply();<br>
}<br>
<font color="#FF0000"> CORBA::ULong rc;<br>
rc <<= *this;<br>
switch (rc) {<br>
case GIOP::SYSTEM_EXCEPTION:<br>
{<br>
UnMarshallSystemException();<br>
// never reaches here<br>
}<br>
</font> break;<br>
case GIOP::NO_EXCEPTION:<br>
case GIOP::USER_EXCEPTION:<br>
case GIOP::LOCATION_FORWARD:<br>
break;<br>
default:<br>
// Should never receive anything other that the above<br>
// Same treatment as wrong header<br>
setStrandIsDying();<br>
OMNIORB_THROW_CONNECTION_BROKEN(0,CORBA::COMPLETED_MAYBE);<br>
}<br>
return (GIOP::ReplyStatusType)rc;<br>
}<br>
--------------------------------------------------------------------------------------------------------------------------<br>
end - giopClient.cc<br>
--------------------------------------------------------------------------------------------------------------------------<br><br>
Best Regards<br><br>
<x-sigsep><p></x-sigsep>
/\ |\ /|<br>
/--\ndrew | \/ |ak<br>
/ \ | |<br><br>
Senior Engineer<br>
Singapore Technologies Electronics Ltd<br>
Product Development & Management Division (PDMD)<br>
Large-Scale Systems Group<br>
(65) 6413 1613 (Direct) <br>
(65) 6484 8841 (Fax)<br>
<a href="mailto:makwha@stee.st.com.sg" eudora="autourl">mailto:makwha@stee.st.com.sg<br>
</a><a href="http://www.stee.com.sg/" eudora="autourl">www.stee.com.sg</a></html>
--=====================_9926533==_.ALT--