summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/IFRService
diff options
context:
space:
mode:
authorfields_t <fields_t@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2008-11-13 21:54:42 +0000
committerfields_t <fields_t@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2008-11-13 21:54:42 +0000
commit95f4af27f787c7b8f042a7515dc20e38c73ca4f3 (patch)
tree9024f116f1c9191c23af8ddd3395e3a3bc6a0579 /TAO/orbsvcs/orbsvcs/IFRService
parent03360df581b611ca9edb1e5958100fedb4a9b399 (diff)
downloadATCD-95f4af27f787c7b8f042a7515dc20e38c73ca4f3.tar.gz
ChangeLogTag: Thu Nov 13 21:48:14 UTC 2008 Trevor Fields <fields_t@ociweb.com>
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/IFRService')
-rw-r--r--TAO/orbsvcs/orbsvcs/IFRService/Container_i.cpp15
-rw-r--r--TAO/orbsvcs/orbsvcs/IFRService/Container_i.h6
-rw-r--r--TAO/orbsvcs/orbsvcs/IFRService/ExceptionDef_i.cpp12
-rw-r--r--TAO/orbsvcs/orbsvcs/IFRService/StructDef_i.cpp4
-rw-r--r--TAO/orbsvcs/orbsvcs/IFRService/UnionDef_i.cpp4
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;