osaf/services/saf/amf/amfd/imm.cc | 13 ++++++++++---
1 files changed, 10 insertions(+), 3 deletions(-)
SaNameT and SaStringT types need to be deep copied
diff --git a/osaf/services/saf/amf/amfd/imm.cc
b/osaf/services/saf/amf/amfd/imm.cc
--- a/osaf/services/saf/amf/amfd/imm.cc
+++ b/osaf/services/saf/amf/amfd/imm.cc
@@ -246,8 +246,7 @@ AvdJobDequeueResultT ImmObjUpdate::exec(
ImmObjUpdate::~ImmObjUpdate()
{
if (attrValueType_ == SA_IMM_ATTR_SANAMET) {
- SaImmAttrValueT attrValues[] = {value_};
- osaf_extended_name_free(static_cast<SaNameT*>(attrValues[0]));
+ osaf_extended_name_free(static_cast<SaNameT*>(value_));
}
delete [] attributeName_;
delete [] static_cast<char*>(value_);
@@ -1685,7 +1684,15 @@ void avd_saImmOiRtObjectUpdate(const std
ajob->attrValueType_ = attrValueType;
ajob->value_ = new char[sz];
- memcpy(ajob->value_, value, sz);
+ if (attrValueType == SA_IMM_ATTR_SANAMET) {
+
osaf_extended_name_alloc(osaf_extended_name_borrow(static_cast<SaNameT
*>(value)),
+ static_cast<SaNameT *>(ajob->value_));
+ } else if (attrValueType == SA_IMM_ATTR_SASTRINGT) {
+ delete [] static_cast<char*>(ajob->value_);
+ ajob->value_ = StrDup(static_cast<SaStringT>(value));
+ } else {
+ memcpy(ajob->value_, value, sz);
+ }
Fifo::queue(ajob);
TRACE_LEAVE();
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel