always call close callback, free ref for GC