static void delete_channel(ChannelNP * c) { trace(LOG_PROTOCOL, "Deleting channel %#lx", c); assert(c->lock_cnt == 0); assert(c->out_flush_cnt == 0); assert(c->magic == CHANNEL_MAGIC); assert(c->read_pending == 0); assert(c->ibuf.handling_msg != HandleMsgTriggered); channel_clear_broadcast_group(&c->chan); if (c->np_socket >= 0) { nopoll_conn_close(c->np_socket); c->np_socket = NULL; } list_remove(&c->chan.chanlink); if (list_is_empty(&channel_root) && list_is_empty(&channel_server_root)) shutdown_set_stopped(&channel_shutdown); c->magic = 0; #if ENABLE_OutputQueue output_queue_clear(&c->out_queue); #endif /* ENABLE_OutputQueue */ #if ENABLE_Splice close(c->pipefd[0]); close(c->pipefd[1]); #endif /* ENABLE_Splice */ output_queue_free_obuf(c->obuf); loc_free(c->ibuf.buf); loc_free(c->chan.peer_name); loc_free(c); }
static void delete_channel(ChannelTCP * c) { trace(LOG_PROTOCOL, "Deleting channel %#lx", c); assert(c->lock_cnt == 0); assert(c->out_flush_cnt == 0); assert(c->magic == CHANNEL_MAGIC); assert(c->read_pending == 0); assert(c->ibuf.handling_msg != HandleMsgTriggered); channel_clear_broadcast_group(&c->chan); if (c->socket >= 0) { closesocket(c->socket); c->socket = -1; } list_remove(&c->chan.chanlink); c->magic = 0; #if ENABLE_OutputQueue output_queue_clear(&c->out_queue); #endif /* ENABLE_OutputQueue */ #if ENABLE_SSL if (c->ssl) SSL_free(c->ssl); #endif /* ENABLE_SSL */ #if ENABLE_Splice close(c->pipefd[0]); close(c->pipefd[1]); #endif /* ENABLE_Splice */ loc_free(c->ibuf.buf); loc_free(c->chan.peer_name); loc_free(c->addr_buf); loc_free(c); }
static void delete_channel(ChannelPIPE * c) { trace(LOG_PROTOCOL, "Deleting channel %#lx", c); assert(c->lock_cnt == 0); assert(c->out_flush_cnt == 0); assert(c->magic == CHANNEL_MAGIC); assert(c->read_pending == 0); assert(c->ibuf.handling_msg != HandleMsgTriggered); assert(output_queue_is_empty(&c->out_queue)); output_queue_clear(&c->out_queue); channel_clear_broadcast_group(&c->chan); close_input_pipe(c); list_remove(&c->chan.chanlink); if (list_is_empty(&channel_root) && list_is_empty(&channel_server_root)) shutdown_set_stopped(&channel_shutdown); c->magic = 0; loc_free(c->ibuf.buf); loc_free(c->chan.peer_name); loc_free(c); }
static void delete_channel(ChannelTCP * c) { trace(LOG_PROTOCOL, "Deleting channel %#lx", c); assert(c->lock_cnt == 0); assert(c->magic == CHANNEL_MAGIC); assert(c->read_pending == 0); if (c->ibuf.handling_msg == HandleMsgTriggered) { /* Cancel pending message handling since channel object is gone. */ c->ibuf.handling_msg = HandleMsgIdle; cancel_event(handle_channel_msg, c, 0); } channel_clear_broadcast_group(&c->chan); channel_clear_suspend_group(&c->chan); c->magic = 0; #if ENABLE_SSL if (c->ssl) SSL_free(c->ssl); #endif /* ENABLE_SSL */ #if ENABLE_Splice close(c->pipefd[0]); close(c->pipefd[1]); #endif /* ENABLE_Splice */ loc_free(c->chan.peer_name); loc_free(c); }