diff --git a/src/resource_handle.c b/src/resource_handle.c index 20ced5f8cff8888a2da4cf23dc9719e54b0173cf..eabb48065695a450969b61a0cb6563b34dfa750d 100644 --- a/src/resource_handle.c +++ b/src/resource_handle.c @@ -426,13 +426,18 @@ void reshDestroy(cdiResH resH) nspT = namespaceResHDecode ( resH ); + listElem_t *r = resHList[nsp].resources + nspT.idx; + xassert ( nspT.nsp == nsp && nspT.idx >= 0 && nspT.idx < resHList[nsp].size - && resHList[nsp].resources[nspT.idx].res.v.ops); + && r->res.v.ops); - if (resHList[nsp].resources[nspT.idx].status & RESH_IN_USE_BIT) - reshRemove_(nsp, nspT.idx, __func__); + if (r->status & RESH_IN_USE_BIT) + { + r->res.v.ops->valDestroy(r->res.v.val); + reshRemove_(nsp, nspT.idx, __func__); + } LIST_UNLOCK(); }