keep a ref of the callback in gc heap