mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-04 00:25:29 +00:00
fix? a socket problem with canceling things, again
This commit is contained in:
@@ -1203,12 +1203,14 @@ dispatch_read(isc_socket_t *sock)
|
|||||||
intev_t *iev;
|
intev_t *iev;
|
||||||
isc_socketevent_t *ev;
|
isc_socketevent_t *ev;
|
||||||
|
|
||||||
iev = &sock->readable_ev;
|
|
||||||
ev = ISC_LIST_HEAD(sock->recv_list);
|
|
||||||
|
|
||||||
INSIST(ev != NULL);
|
|
||||||
INSIST(!sock->pending_recv);
|
INSIST(!sock->pending_recv);
|
||||||
|
|
||||||
|
ev = ISC_LIST_HEAD(sock->recv_list);
|
||||||
|
if (ev == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
sock->pending_recv = 1;
|
sock->pending_recv = 1;
|
||||||
|
iev = &sock->readable_ev;
|
||||||
|
|
||||||
XTRACE(TRACE_WATCHER, ("dispatch_read: posted event %p to task %p\n",
|
XTRACE(TRACE_WATCHER, ("dispatch_read: posted event %p to task %p\n",
|
||||||
ev, ev->sender));
|
ev, ev->sender));
|
||||||
@@ -1227,12 +1229,14 @@ dispatch_write(isc_socket_t *sock)
|
|||||||
intev_t *iev;
|
intev_t *iev;
|
||||||
isc_socketevent_t *ev;
|
isc_socketevent_t *ev;
|
||||||
|
|
||||||
iev = &sock->writable_ev;
|
|
||||||
ev = ISC_LIST_HEAD(sock->send_list);
|
|
||||||
|
|
||||||
INSIST(ev != NULL);
|
|
||||||
INSIST(!sock->pending_send);
|
INSIST(!sock->pending_send);
|
||||||
|
|
||||||
|
ev = ISC_LIST_HEAD(sock->send_list);
|
||||||
|
if (ev == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
sock->pending_send = 1;
|
sock->pending_send = 1;
|
||||||
|
iev = &sock->writable_ev;
|
||||||
|
|
||||||
XTRACE(TRACE_WATCHER, ("dispatch_send: posted event %p to task %p\n",
|
XTRACE(TRACE_WATCHER, ("dispatch_send: posted event %p to task %p\n",
|
||||||
ev, ev->sender));
|
ev, ev->sender));
|
||||||
@@ -1254,12 +1258,18 @@ dispatch_accept(isc_socket_t *sock)
|
|||||||
intev_t *iev;
|
intev_t *iev;
|
||||||
isc_socket_newconnev_t *ev;
|
isc_socket_newconnev_t *ev;
|
||||||
|
|
||||||
iev = &sock->readable_ev;
|
|
||||||
ev = ISC_LIST_HEAD(sock->accept_list);
|
|
||||||
|
|
||||||
INSIST(ev != NULL);
|
|
||||||
INSIST(!sock->pending_accept);
|
INSIST(!sock->pending_accept);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Are there any done events left, or were they all canceled
|
||||||
|
* before the manager got the socket lock?
|
||||||
|
*/
|
||||||
|
ev = ISC_LIST_HEAD(sock->accept_list);
|
||||||
|
if (ev == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
sock->pending_accept = 1;
|
sock->pending_accept = 1;
|
||||||
|
iev = &sock->readable_ev;
|
||||||
|
|
||||||
sock->references++; /* keep socket around for this internal event */
|
sock->references++; /* keep socket around for this internal event */
|
||||||
iev->sender = sock;
|
iev->sender = sock;
|
||||||
@@ -1278,7 +1288,7 @@ dispatch_connect(isc_socket_t *sock)
|
|||||||
iev = &sock->writable_ev;
|
iev = &sock->writable_ev;
|
||||||
|
|
||||||
ev = sock->connect_ev;
|
ev = sock->connect_ev;
|
||||||
INSIST(ev != NULL);
|
INSIST(ev != NULL); /* XXX */
|
||||||
|
|
||||||
INSIST(sock->connecting);
|
INSIST(sock->connecting);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user