static void done_write_request(void * args) { ChannelPIPE * c = (ChannelPIPE *)((AsyncReqInfo *)args)->client_data; int size = 0; int error = 0; assert(args == &c->out_req); if (c->out_req.u.fio.rval < 0) error = c->out_req.error; else size = c->out_req.u.fio.rval; output_queue_done(&c->out_queue, error, size); if (output_queue_is_empty(&c->out_queue) && c->chan->state == ChannelStateDisconnected) close_output_pipe(c); pipe_unlock(c->chan); }
static void done_write_request(void * args) { ChannelTCP * c = (ChannelTCP *)((AsyncReqInfo *)args)->client_data; int size = 0; int error = 0; assert(args == &c->wr_req); assert(c->socket >= 0); if (c->wr_req.u.sio.rval < 0) error = c->wr_req.error; else if (c->wr_req.type == AsyncReqSend) size = c->wr_req.u.sio.rval; output_queue_done(&c->out_queue, error, size); if (error) c->out_errno = error; if (output_queue_is_empty(&c->out_queue) && c->chan.state == ChannelStateDisconnected) shutdown(c->socket, SHUT_WR); tcp_unlock(&c->chan); }
static void done_write_request(void * args) { ChannelNP * c = (ChannelNP *)((AsyncReqInfo *)args)->client_data; int size = 0; int error = 0; assert(args == &c->wr_req); assert(c->socket != NOPOLL_INVALID_SOCKET); loc_free(((AsyncReqInfo *)args)->u.user.data); if (c->wr_req.u.user.rval < 0) error = c->wr_req.error; size = c->wr_req.u.user.rval; output_queue_done(&c->out_queue, error, size); if (error) c->out_errno = error; if (output_queue_is_empty(&c->out_queue) && c->chan.state == ChannelStateDisconnected) nopoll_conn_shutdown(c->np_socket); np_unlock(&c->chan); trace(LOG_PROTOCOL, "done_write_request"); }