2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-31 22:45:39 +00:00

Use multiple worker queues (using isc_task_sendto()) in unix socket code

This commit is contained in:
Witold Kręcicki
2018-10-18 22:00:15 +00:00
parent 559ce1e330
commit c1a4f0e66a

View File

@@ -2802,13 +2802,15 @@ send_recvdone_event(isc__socket_t *sock, isc_socketevent_t **dev) {
(*dev)->ev_sender = sock; (*dev)->ev_sender = sock;
if (ISC_LINK_LINKED(*dev, ev_link)) if (ISC_LINK_LINKED(*dev, ev_link)) {
ISC_LIST_DEQUEUE(sock->recv_list, *dev, ev_link); ISC_LIST_DEQUEUE(sock->recv_list, *dev, ev_link);
}
if (((*dev)->attributes & ISC_SOCKEVENTATTR_ATTACHED) != 0) { if (((*dev)->attributes & ISC_SOCKEVENTATTR_ATTACHED) != 0) {
isc_task_sendanddetach(&task, (isc_event_t **)dev); isc_task_sendtoanddetach(&task, (isc_event_t **)dev,
sock->threadid);
} else { } else {
isc_task_send(task, (isc_event_t **)dev); isc_task_sendto(task, (isc_event_t **)dev, sock->threadid);
} }
} }
@@ -2830,9 +2832,10 @@ send_senddone_event(isc__socket_t *sock, isc_socketevent_t **dev) {
ISC_LIST_DEQUEUE(sock->send_list, *dev, ev_link); ISC_LIST_DEQUEUE(sock->send_list, *dev, ev_link);
if (((*dev)->attributes & ISC_SOCKEVENTATTR_ATTACHED) != 0) { if (((*dev)->attributes & ISC_SOCKEVENTATTR_ATTACHED) != 0) {
isc_task_sendanddetach(&task, (isc_event_t **)dev); isc_task_sendtoanddetach(&task, (isc_event_t **)dev,
sock->threadid);
} else { } else {
isc_task_send(task, (isc_event_t **)dev); isc_task_sendto(task, (isc_event_t **)dev, sock->threadid);
} }
} }
@@ -2853,7 +2856,7 @@ send_connectdone_event(isc__socket_t *sock, isc_socket_connev_t **dev) {
if (ISC_LINK_LINKED(*dev, ev_link)) if (ISC_LINK_LINKED(*dev, ev_link))
ISC_LIST_DEQUEUE(sock->connect_list, *dev, ev_link); ISC_LIST_DEQUEUE(sock->connect_list, *dev, ev_link);
isc_task_sendanddetach(&task, (isc_event_t **)dev); isc_task_sendtoanddetach(&task, (isc_event_t **)dev, sock->threadid);
} }
/* /*
@@ -3110,7 +3113,7 @@ internal_accept(isc__socket_t *sock) {
task = dev->ev_sender; task = dev->ev_sender;
dev->ev_sender = sock; dev->ev_sender = sock;
isc_task_sendanddetach(&task, ISC_EVENT_PTR(&dev)); isc_task_sendtoanddetach(&task, ISC_EVENT_PTR(&dev), sock->threadid);
return; return;
soft_error: soft_error:
@@ -4896,7 +4899,7 @@ isc_socket_connect(isc_socket_t *sock0, const isc_sockaddr_t *addr,
if (sock->connected) { if (sock->connected) {
INSIST(isc_sockaddr_equal(&sock->peer_address, addr)); INSIST(isc_sockaddr_equal(&sock->peer_address, addr));
dev->result = ISC_R_SUCCESS; dev->result = ISC_R_SUCCESS;
isc_task_send(task, ISC_EVENT_PTR(&dev)); isc_task_sendto(task, ISC_EVENT_PTR(&dev), sock->threadid);
UNLOCK(&sock->lock); UNLOCK(&sock->lock);
@@ -4960,7 +4963,7 @@ isc_socket_connect(isc_socket_t *sock0, const isc_sockaddr_t *addr,
err_exit: err_exit:
sock->connected = 0; sock->connected = 0;
isc_task_send(task, ISC_EVENT_PTR(&dev)); isc_task_sendto(task, ISC_EVENT_PTR(&dev), sock->threadid);
UNLOCK(&sock->lock); UNLOCK(&sock->lock);
inc_stats(sock->manager->stats, inc_stats(sock->manager->stats,
@@ -4976,7 +4979,7 @@ isc_socket_connect(isc_socket_t *sock0, const isc_sockaddr_t *addr,
sock->connected = 1; sock->connected = 1;
sock->bound = 1; sock->bound = 1;
dev->result = ISC_R_SUCCESS; dev->result = ISC_R_SUCCESS;
isc_task_send(task, ISC_EVENT_PTR(&dev)); isc_task_sendto(task, ISC_EVENT_PTR(&dev), sock->threadid);
UNLOCK(&sock->lock); UNLOCK(&sock->lock);
@@ -5262,8 +5265,8 @@ isc_socket_cancel(isc_socket_t *sock0, isc_task_t *task, unsigned int how) {
dev->result = ISC_R_CANCELED; dev->result = ISC_R_CANCELED;
dev->ev_sender = sock; dev->ev_sender = sock;
isc_task_sendanddetach(&current_task, isc_task_sendtoanddetach(&current_task,
ISC_EVENT_PTR(&dev)); ISC_EVENT_PTR(&dev), sock->threadid);
} }
dev = next; dev = next;