From 638ea4e513b5d9578a4fddfe5e62c93efe9365c5 Mon Sep 17 00:00:00 2001 From: amichelotti <amichelotti@lnf.infn.it> Date: Mon, 24 Oct 2022 22:25:18 +0200 Subject: [PATCH] fix pva sharedptr --- chaos/common/data/CDataWrapper.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/chaos/common/data/CDataWrapper.cpp b/chaos/common/data/CDataWrapper.cpp index c65b9a2d2..bb51af070 100644 --- a/chaos/common/data/CDataWrapper.cpp +++ b/chaos/common/data/CDataWrapper.cpp @@ -1832,15 +1832,18 @@ void CDataWrapper::decodePVField(epics::pvData::PVFieldConstPtr pv_field){ case epics::pvData::structure: { LDBG_ <<"\t"<< "Adding Structure " << fname; CDataWrapper cs; - pvd::PVStructure::const_shared_pointer tmp((pvd::PVStructure*)pv_field.get()); + //pvd::PVStructure::const_shared_pointer tmp((pvd::PVStructure*)pv_field.get()); + pvd::PVStructure::const_shared_pointer tmp; + tmp=(*(pvd::PVStructure::const_shared_pointer*)&pv_field); cs.setSerializedData(tmp); addCSDataValue(fname, cs); break; } case epics::pvData::structureArray: { LDBG_ <<"\t"<< "Adding Structure Array " << fname; - pvd::PVStructureArray::const_shared_pointer tmp((pvd::PVStructureArray*)pv_field.get()); + pvd::PVStructureArray::const_shared_pointer tmp; + tmp=(*(pvd::PVStructureArray::const_shared_pointer*)&pv_field); if (tmp->getLength() != 0){ pvd::PVStructureArray::const_svector data = tmp->view(); std::vector<CDataWrapper> vc; @@ -1857,7 +1860,8 @@ void CDataWrapper::decodePVField(epics::pvData::PVFieldConstPtr pv_field){ case epics::pvData::union_: { DBG <<"\t"<< fname <<"Adding Union "; - pvd::PVUnion::const_shared_pointer tmp((pvd::PVUnion*)pv_field.get());// = ptr->getSubField<pvd::PVUnion>(fname); + pvd::PVUnion::const_shared_pointer tmp; + tmp=*((pvd::PVUnion::const_shared_pointer*)&pv_field);// = ptr->getSubField<pvd::PVUnion>(fname); CDataWrapper cs; @@ -1888,7 +1892,6 @@ void CDataWrapper::setSerializedData(pvd::PVStructureConstPtr ptr) { std::string id = structure_ptr->getID(); addStringValue("type", id); - size_t numberFields = ptr->getNumberFields(); pvd::PVFieldPtrArray pv_fields = ptr->getPVFields(); for(pvd::PVFieldPtrArray::iterator i =pv_fields.begin();i!=pv_fields.end();i++){ decodePVField(*i); -- GitLab