INSIST(VALID_SOCKET(sock));
- LOCK(&sock->lock);
if (sock->fd < 0) {
/* Socket is gone */
- UNLOCK(&sock->lock);
return;
}
socket_log(sock, NULL, TRACE,
dev = ISC_LIST_HEAD(sock->accept_list);
if (dev == NULL) {
unwatch_fd(thread, sock->fd, SELECT_POKE_ACCEPT);
- UNLOCK(&sock->lock);
return;
}
/*
* Poke watcher if there are more pending accepts.
*/
- if (ISC_LIST_EMPTY(sock->accept_list))
+ if (ISC_LIST_EMPTY(sock->accept_list)) {
unwatch_fd(thread, sock->fd,
SELECT_POKE_ACCEPT);
-
- UNLOCK(&sock->lock);
+ }
if (fd != -1) {
result = make_nonblock(fd);
soft_error:
watch_fd(thread, sock->fd, SELECT_POKE_ACCEPT);
- UNLOCK(&sock->lock);
inc_stats(manager->stats, sock->statsindex[STATID_ACCEPTFAIL]);
return;
INSIST(VALID_SOCKET(sock));
- LOCK(&sock->lock);
if (sock->fd < 0) {
/* Socket is gone */
- UNLOCK(&sock->lock);
return;
}
dev = ISC_LIST_HEAD(sock->recv_list);
unwatch_fd(&sock->manager->threads[sock->threadid], sock->fd,
SELECT_POKE_READ);
}
- UNLOCK(&sock->lock);
}
static void
INSIST(VALID_SOCKET(sock));
- LOCK(&sock->lock);
if (sock->fd < 0) {
/* Socket is gone */
- UNLOCK(&sock->lock);
return;
}
dev = ISC_LIST_HEAD(sock->send_list);
unwatch_fd(&sock->manager->threads[sock->threadid],
sock->fd, SELECT_POKE_WRITE);
}
- UNLOCK(&sock->lock);
}
/*
return;
}
+ LOCK(&sock->lock);
if (readable) {
if (sock->listener) {
internal_accept(sock);
internal_send(sock);
}
}
+ UNLOCK(&sock->lock);
UNLOCK(&thread->fdlock[lockid]);
if (isc_refcount_decrement(&sock->references) == 1) {
INSIST(VALID_SOCKET(sock));
- LOCK(&sock->lock);
-
/*
* Get the first item off the connect list.
* If it is empty, unlock the socket and return.
*/
if (SOFT_ERROR(errno) || errno == EINPROGRESS) {
sock->connecting = 1;
- UNLOCK(&sock->lock);
return;
}
finish:
unwatch_fd(&sock->manager->threads[sock->threadid], sock->fd,
SELECT_POKE_CONNECT);
-
- UNLOCK(&sock->lock);
}
isc_result_t