The zt_destroy() function was missing isc_refcount_destroy() on the two reference counters. The isc_refcount_destroy() adds proper memory ordering on destroy and also ensures that the reference counters have been zeroed before destroying the object.