support managed destructors and make beacon invalidation tail recursive