refactore at_exit