diff options
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/IFRService')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/IFRService/Container_i.cpp | 15 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/IFRService/Container_i.h | 6 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/IFRService/ExceptionDef_i.cpp | 12 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/IFRService/StructDef_i.cpp | 4 | ||||
-rw-r--r-- | TAO/orbsvcs/orbsvcs/IFRService/UnionDef_i.cpp | 4 |
5 files changed, 34 insertions, 7 deletions
diff --git a/TAO/orbsvcs/orbsvcs/IFRService/Container_i.cpp b/TAO/orbsvcs/orbsvcs/IFRService/Container_i.cpp index b7d7ed54270..7abc1365f09 100644 --- a/TAO/orbsvcs/orbsvcs/IFRService/Container_i.cpp +++ b/TAO/orbsvcs/orbsvcs/IFRService/Container_i.cpp @@ -47,6 +47,13 @@ TAO_Container_i::destroy (void) void TAO_Container_i::destroy_i (void) { + this->destroy_references_i(); + this->destroy_defintions_i(); +} + +void +TAO_Container_i::destroy_references_i (void) +{ int index = 0; int status; ACE_TString section_name; @@ -118,8 +125,14 @@ TAO_Container_i::destroy_i (void) "refs", 1); } +} - // Destroy definitions. +void +TAO_Container_i::destroy_defintions_i (void) +{ + int index = 0; + int status; + ACE_TString section_name; ACE_Configuration_Section_Key defns_key; status = diff --git a/TAO/orbsvcs/orbsvcs/IFRService/Container_i.h b/TAO/orbsvcs/orbsvcs/IFRService/Container_i.h index b02f29c15ab..92813f5cd92 100644 --- a/TAO/orbsvcs/orbsvcs/IFRService/Container_i.h +++ b/TAO/orbsvcs/orbsvcs/IFRService/Container_i.h @@ -62,6 +62,12 @@ public: virtual void destroy_i ( ); + virtual void destroy_references_i ( + ); + + virtual void destroy_defintions_i ( + ); + virtual CORBA::Contained_ptr lookup ( const char *search_name ); diff --git a/TAO/orbsvcs/orbsvcs/IFRService/ExceptionDef_i.cpp b/TAO/orbsvcs/orbsvcs/IFRService/ExceptionDef_i.cpp index 97a956d8bbb..9ec6a018504 100644 --- a/TAO/orbsvcs/orbsvcs/IFRService/ExceptionDef_i.cpp +++ b/TAO/orbsvcs/orbsvcs/IFRService/ExceptionDef_i.cpp @@ -221,6 +221,9 @@ TAO_ExceptionDef_i::members_i (void) ACE_Configuration_Section_Key member_key; TAO_IDLType_i *impl = 0; + // Store to replace below. + ACE_Configuration_Section_Key key_holder = this->section_key_; + for (CORBA::ULong k = 0; k < size; ++k) { name_queue.dequeue_head (name); @@ -245,6 +248,11 @@ TAO_ExceptionDef_i::members_i (void) this->repo_); retval[k].type = impl->type_i (); + + // If this struct contains a nested struct (of another type) at + // some level, the above code will have changed the section key + // so we have to replace it with the value we stored above. + this->section_key (key_holder); } return retval._retn (); @@ -263,8 +271,8 @@ TAO_ExceptionDef_i::members (const CORBA::StructMemberSeq &members) void TAO_ExceptionDef_i::members_i (const CORBA::StructMemberSeq &members) { - // Destroy our old members, both refs and defns. - TAO_Container_i::destroy_i (); + // Destroy our old refs. + TAO_Container_i::destroy_references_i (); CORBA::ULong count = members.length (); diff --git a/TAO/orbsvcs/orbsvcs/IFRService/StructDef_i.cpp b/TAO/orbsvcs/orbsvcs/IFRService/StructDef_i.cpp index 96499913af6..81ac09e3c46 100644 --- a/TAO/orbsvcs/orbsvcs/IFRService/StructDef_i.cpp +++ b/TAO/orbsvcs/orbsvcs/IFRService/StructDef_i.cpp @@ -245,8 +245,8 @@ TAO_StructDef_i::members (const CORBA::StructMemberSeq &members) void TAO_StructDef_i::members_i (const CORBA::StructMemberSeq &members) { - // Destroy our old members, both refs and defns. - TAO_Container_i::destroy_i (); + // Destroy our old refs. + TAO_Container_i::destroy_references_i (); CORBA::ULong count = members.length (); diff --git a/TAO/orbsvcs/orbsvcs/IFRService/UnionDef_i.cpp b/TAO/orbsvcs/orbsvcs/IFRService/UnionDef_i.cpp index eb2a8ecb860..49d896fce26 100644 --- a/TAO/orbsvcs/orbsvcs/IFRService/UnionDef_i.cpp +++ b/TAO/orbsvcs/orbsvcs/IFRService/UnionDef_i.cpp @@ -314,8 +314,8 @@ TAO_UnionDef_i::members (const CORBA::UnionMemberSeq &members) void TAO_UnionDef_i::members_i (const CORBA::UnionMemberSeq &members) { - // Destroy our old members, both refs and defns. - TAO_Container_i::destroy_i (); + // Destroy our old refs. + TAO_Container_i::destroy_references_i (); ACE_TString section_name; ACE_Configuration_Section_Key refs_key; |