On 05/28/2018 09:34 AM, Sukrit Bhatnagar wrote: > > This is what new macros will look like: > > # define _VIR_TYPE_PTR(type) type##Ptr > > # define _VIR_ATTR_AUTOFREE_PTR(type) __attribute__((cleanup(type##Free))) > # define _VIR_ATTR_AUTOCLOSE_PTR(type) __attribute__((cleanup(type##Close))) > # define _VIR_ATTR_AUTOCLEAN_PTR(type) __attribute__((cleanup(type##Clean))) > > # define VIR_AUTOFREE_PTR(type) _VIR_ATTR_AUTOFREE_PTR(type) _VIR_TYPE_PTR(type) > > > The problem is that our vir*Free functions take on vir*Ptr as the > parameter and not > vir*Ptr * (pointer to it). > > For example, instead of: > void virArpTableFree(virArpTablePtr table); > > we would need: > void virArpTableFree(virArpTablePtr *table); > > if we declare something like: > VIR_AUTOFREE_PTR(virArpTable) table = NULL; > > > Also, I tried to add a new function: > void virArpTablePtrFree(virArpTablePtr *table) > { > size_t i; > > if (!*table) > return; > > for (i = 0; i < (*table)->n; i++) { > VIR_FREE((*table)->t[i].ipaddr); > VIR_FREE((*table)->t[i].mac); > } > VIR_FREE((*table)->t); > VIR_FREE((*table)); > VIR_FREE(table); As Erik pointed out, this last VIR_FREE(table) looks fishy. However, do you have patch that I can apply and reproduce? Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list