move device cleanup to common code, fixes use-after-free in tunnel code