summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be/be_visitor_exception.cpp
diff options
context:
space:
mode:
authorgokhale <gokhale@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-04-23 21:18:52 +0000
committergokhale <gokhale@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-04-23 21:18:52 +0000
commit99df1ccdfae63a27750f2af89b98001458d72f51 (patch)
tree705167126a9f07fc34d50ee0ce41dee68800ff8e /TAO/TAO_IDL/be/be_visitor_exception.cpp
parent339eb098d8706482a57eaa01b41b8c66d1226ec5 (diff)
downloadATCD-99df1ccdfae63a27750f2af89b98001458d72f51.tar.gz
*** empty log message ***
Diffstat (limited to 'TAO/TAO_IDL/be/be_visitor_exception.cpp')
-rw-r--r--TAO/TAO_IDL/be/be_visitor_exception.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_exception.cpp b/TAO/TAO_IDL/be/be_visitor_exception.cpp
index 028ab2fd0a9..4e635804a32 100644
--- a/TAO/TAO_IDL/be/be_visitor_exception.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_exception.cpp
@@ -434,6 +434,8 @@ int be_visitor_exception_cs::visit_exception (be_exception *node)
<< "CORBA::Environment _tao_env;" << be_nl
<< "if (!_tao_any.type ()->equal (" << node->tc_name ()
<< ", _tao_env)) return 0; // not equal" << be_nl
+ << "if (_tao_any.any_owns_data ())" << be_nl
+ << "{" << be_idt_nl
<< "ACE_NEW_RETURN (_tao_elem, " << node->name () << ", 0);"
<< be_nl
<< "TAO_InputCDR stream ((ACE_Message_Block *)_tao_any.value ());"
@@ -447,8 +449,18 @@ int be_visitor_exception_cs::visit_exception (be_exception *node)
<< be_nl
<< " return 1;" << be_uidt_nl
<< "}" << be_nl
- << "else" << be_nl
- << " return 0;" << be_uidt_nl
+ << "else" << be_nl // decode failed
+ << "{" << be_idt_nl
+ << "delete _tao_elem;" << be_nl
+ << "return 0;" << be_uidt_nl
+ << "}" << be_uidt_nl
+ << "}" << be_nl
+ << "else" << be_nl // else any does not own the data
+ << "{" << be_idt_nl
+ << "_tao_elem = (" << node->name () << " *)_tao_any.value ();"
+ << be_nl
+ << "return 1;" << be_uidt_nl
+ << "}" << be_uidt_nl
<< "}\n\n";
os->indent ();