Maybe set self->read_sig to null so that if for some weird reason this code gets executed twice, it just disconnects once? (same for close_sig)