Skip to content

Commit

Permalink
Merge pull request #3947 from iguessthislldo/igtd/dynamic-fixes
Browse files Browse the repository at this point in the history
Fixes for DynamicDataReader and DynamicDataWriter
  • Loading branch information
mitza-oci committed Dec 21, 2022
2 parents c969d19 + 3071a6e commit 1991fa4
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 5 deletions.
2 changes: 1 addition & 1 deletion dds/DCPS/DataWriterImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2905,7 +2905,7 @@ DDS::ReturnCode_t DataWriterImpl::get_key_value(Sample_rch& sample, DDS::Instanc
if (it == instance_handles_to_values_.end()) {
return DDS::RETCODE_BAD_PARAMETER;
}
sample = it->second;
sample = it->second->copy(Sample::Mutable);
return DDS::RETCODE_OK;
}

Expand Down
28 changes: 24 additions & 4 deletions dds/DCPS/XTypes/DynamicTypeSupport.h
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,9 @@ class OpenDDS_Dcps_Export DynamicDataWriterImpl
DCPS::Sample_rch sample;
const DDS::ReturnCode_t rc = DataWriterImpl::get_key_value(sample, handle);
if (sample) {
key_holder = sample->get_dynamic_data(0);
CORBA::release(key_holder);
DDS::DynamicData_var result = sample->get_dynamic_data(0);
key_holder = result._retn();
}
return rc;
}
Expand Down Expand Up @@ -296,13 +298,25 @@ class OPENDDS_MAYBE_EXPORT DynamicDataReaderImpl
DDS::ReturnCode_t read_next_sample(DDS::DynamicData*& dyn, DDS::SampleInfo& si)
{
DynamicSample ds(dyn);
return Base::read_next_sample(ds, si);
const DDS::ReturnCode_t rc = Base::read_next_sample(ds, si);
if (rc == DDS::RETCODE_OK) {
CORBA::release(dyn);
DDS::DynamicData_var result = ds.get_dynamic_data(0);
dyn = result._retn();
}
return rc;
}

DDS::ReturnCode_t take_next_sample(DDS::DynamicData*& dyn, DDS::SampleInfo& si)
{
DynamicSample ds(dyn);
return Base::take_next_sample(ds, si);
const DDS::ReturnCode_t rc = Base::take_next_sample(ds, si);
if (rc == DDS::RETCODE_OK) {
CORBA::release(dyn);
DDS::DynamicData_var result = ds.get_dynamic_data(0);
dyn = result._retn();
}
return rc;
}

DDS::InstanceHandle_t lookup_instance(DDS::DynamicData* dyn)
Expand All @@ -314,7 +328,13 @@ class OPENDDS_MAYBE_EXPORT DynamicDataReaderImpl
DDS::ReturnCode_t get_key_value(DDS::DynamicData*& dyn, DDS::InstanceHandle_t ih)
{
DynamicSample ds(dyn);
return Base::get_key_value(ds, ih);
const DDS::ReturnCode_t rc = Base::get_key_value(ds, ih);
if (rc == DDS::RETCODE_OK) {
CORBA::release(dyn);
DDS::DynamicData_var result = ds.get_dynamic_data(0);
dyn = result._retn();
}
return rc;
}

void install_type_support(DCPS::TypeSupportImpl*);
Expand Down

0 comments on commit 1991fa4

Please sign in to comment.