prevent nil message flooding by exiting listen go-loop when channel is closed