diff options
author | Benoit Foucher <benoit@zeroc.com> | 2017-07-05 12:10:49 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2017-07-05 12:10:49 +0200 |
commit | e706fb2ceb23b1ee3c225f6d9569c58359b4ee72 (patch) | |
tree | 56d6d90d0a079d89ee7b2ab1c1013055cdca6e29 /cpp/src/Ice/SlicedData.cpp | |
parent | ICE-8218 - Windows OpenSSL test build failure with parallel builds (diff) | |
download | ice-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.cpp | 31 |
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 |