]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Use multiple worker queues (using isc_task_sendto()) in unix socket code
authorWitold Kręcicki <wpk@isc.org>
Thu, 18 Oct 2018 22:00:15 +0000 (22:00 +0000)
committerWitold Kręcicki <wpk@isc.org>
Thu, 15 Nov 2018 08:21:17 +0000 (08:21 +0000)
lib/isc/unix/socket.c

index 8fc085b516d294ba4bbf3ed3b584ee18f8c9c6f9..11a1acd7e4238e9b64a86d7f5a65d0c0a53d39fd 100644 (file)
@@ -2802,13 +2802,15 @@ send_recvdone_event(isc__socket_t *sock, isc_socketevent_t **dev) {
 
        (*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);
+       }
 
        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 {
-               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);
 
        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 {
-               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))
                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;
        dev->ev_sender = sock;
 
-       isc_task_sendanddetach(&task, ISC_EVENT_PTR(&dev));
+       isc_task_sendtoanddetach(&task, ISC_EVENT_PTR(&dev), sock->threadid);
        return;
 
  soft_error:
@@ -4896,7 +4899,7 @@ isc_socket_connect(isc_socket_t *sock0, const isc_sockaddr_t *addr,
        if (sock->connected) {
                INSIST(isc_sockaddr_equal(&sock->peer_address, addr));
                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);
 
@@ -4960,7 +4963,7 @@ isc_socket_connect(isc_socket_t *sock0, const isc_sockaddr_t *addr,
 
        err_exit:
                sock->connected = 0;
-               isc_task_send(task, ISC_EVENT_PTR(&dev));
+               isc_task_sendto(task, ISC_EVENT_PTR(&dev), sock->threadid);
 
                UNLOCK(&sock->lock);
                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->bound = 1;
                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);
 
@@ -5262,8 +5265,8 @@ isc_socket_cancel(isc_socket_t *sock0, isc_task_t *task, unsigned int how) {
 
                                dev->result = ISC_R_CANCELED;
                                dev->ev_sender = sock;
-                               isc_task_sendanddetach(&current_task,
-                                                      ISC_EVENT_PTR(&dev));
+                               isc_task_sendtoanddetach(&current_task,
+                                                      ISC_EVENT_PTR(&dev), sock->threadid);
                        }
 
                        dev = next;