summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/SlicedData.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2017-07-05 12:10:49 +0200
committerBenoit Foucher <benoit@zeroc.com>2017-07-05 12:10:49 +0200
commite706fb2ceb23b1ee3c225f6d9569c58359b4ee72 (patch)
tree56d6d90d0a079d89ee7b2ab1c1013055cdca6e29 /cpp/src/Ice/SlicedData.cpp
parentICE-8218 - Windows OpenSSL test build failure with parallel builds (diff)
downloadice-e706fb2ceb23b1ee3c225f6d9569c58359b4ee72.tar.bz2
ice-e706fb2ceb23b1ee3c225f6d9569c58359b4ee72.tar.xz
ice-e706fb2ceb23b1ee3c225f6d9569c58359b4ee72.zip
Fixed ICE-8217 - added ice_getSlicedData method to Ice values and Ice::SlicedData::clear method to break cyclic references
Diffstat (limited to 'cpp/src/Ice/SlicedData.cpp')
-rw-r--r--cpp/src/Ice/SlicedData.cpp31
1 files changed, 24 insertions, 7 deletions
diff --git a/cpp/src/Ice/SlicedData.cpp b/cpp/src/Ice/SlicedData.cpp
index 99871f5bafa..e9519d73d7d 100644
--- a/cpp/src/Ice/SlicedData.cpp
+++ b/cpp/src/Ice/SlicedData.cpp
@@ -30,6 +30,24 @@ Ice::SlicedData::SlicedData(const SliceInfoSeq& seq) :
{
}
+void
+Ice::SlicedData::clear()
+{
+ SliceInfoSeq tmp;
+ tmp.swap(const_cast<SliceInfoSeq&>(slices));
+ for(SliceInfoSeq::const_iterator p = tmp.begin(); p != tmp.end(); ++p)
+ {
+ for(vector<ValuePtr>::const_iterator q = (*p)->instances.begin(); q != (*p)->instances.end(); ++q)
+ {
+ Ice::SlicedDataPtr slicedData = (*q)->ice_getSlicedData();
+ if(slicedData)
+ {
+ slicedData->clear();
+ }
+ }
+ }
+}
+
#ifndef ICE_CPP11_MAPPING
void
Ice::SlicedData::_iceGcVisitMembers(IceInternal::GCVisitor& visitor)
@@ -57,7 +75,6 @@ Ice::UnknownSlicedValue::_iceGcVisitMembers(IceInternal::GCVisitor& _v)
_slicedData->_iceGcVisitMembers(_v);
}
}
-
#endif
Ice::UnknownSlicedValue::UnknownSlicedValue(const string& unknownTypeId) : _unknownTypeId(unknownTypeId)
@@ -70,12 +87,6 @@ Ice::UnknownSlicedValue::getUnknownTypeId() const
return _unknownTypeId;
}
-SlicedDataPtr
-Ice::UnknownSlicedValue::getSlicedData() const
-{
- return _slicedData;
-}
-
void
Ice::UnknownSlicedValue::_iceWrite(Ice::OutputStream* ostr) const
{
@@ -90,6 +101,12 @@ Ice::UnknownSlicedValue::_iceRead(Ice::InputStream* istr)
_slicedData = istr->endValue(true);
}
+SlicedDataPtr
+Ice::UnknownSlicedValue::ice_getSlicedData() const
+{
+ return _slicedData;
+}
+
#ifdef ICE_CPP11_MAPPING
string