static void tcp_recv(uv_stream_t *handle, ssize_t nread, const uv_buf_t *buf) { uv_loop_t *loop = handle->loop; struct worker_ctx *worker = loop->data; /* Check for originator connection close. */ if (nread <= 0) { if (handle->data) { worker_exec(worker, (uv_handle_t *)handle, NULL, NULL); } if (!uv_is_closing((uv_handle_t *)handle)) { uv_close((uv_handle_t *)handle, handle_free); } return; } int ret = worker_process_tcp(worker, (uv_handle_t *)handle, (const uint8_t *)buf->base, nread); if (ret == 0) { /* Push - pull, stop reading from this handle until * the task is finished. Since the handle has no track of the * pending tasks, it might be freed before the task finishes * leading various errors. */ uv_unref((uv_handle_t *)handle); io_stop_read((uv_handle_t *)handle); } mp_flush(worker->pkt_pool.ctx); }
void udp_recv(uv_udp_t *handle, ssize_t nread, const uv_buf_t *buf, const struct sockaddr *addr, unsigned flags) { uv_loop_t *loop = handle->loop; struct worker_ctx *worker = loop->data; if (nread <= 0) { if (nread < 0) { /* Error response, notify resolver */ worker_exec(worker, (uv_handle_t *)handle, NULL, addr); } /* nread == 0 is for freeing buffers, we don't need to do this */ return; } knot_pkt_t *query = knot_pkt_new(buf->base, nread, &worker->pkt_pool); if (query) { query->max_size = KNOT_WIRE_MAX_PKTSIZE; worker_exec(worker, (uv_handle_t *)handle, query, addr); } mp_flush(worker->pkt_pool.ctx); }
QthreadTeamPolicyMember::QthreadTeamPolicyMember( const QthreadTeamPolicyMember::TaskTeam & ) : m_exec( **worker_exec() ) , m_team_shared(0,0) , m_team_size( s_number_workers_per_shepherd ) , m_team_rank( m_exec.shepherd_worker_rank() ) , m_league_size(1) , m_league_end(1) , m_league_rank(0) { m_exec.shared_reset( m_team_shared ); }
QthreadTeamPolicyMember::QthreadTeamPolicyMember() : m_exec( **worker_exec() ) , m_team_shared(0,0) , m_team_size( 1 ) , m_team_rank( 0 ) , m_league_size(1) , m_league_end(1) , m_league_rank(0) { m_exec.shared_reset( m_team_shared ); }