diff options
Diffstat (limited to 'usr.sbin/bind/lib/isc/unix/socket.c')
| -rw-r--r-- | usr.sbin/bind/lib/isc/unix/socket.c | 238 |
1 files changed, 0 insertions, 238 deletions
diff --git a/usr.sbin/bind/lib/isc/unix/socket.c b/usr.sbin/bind/lib/isc/unix/socket.c index 4a02426ef42..e8cca975580 100644 --- a/usr.sbin/bind/lib/isc/unix/socket.c +++ b/usr.sbin/bind/lib/isc/unix/socket.c @@ -49,7 +49,6 @@ #include <isc/log.h> #include <isc/msgs.h> -#include <isc/mutex.h> #include <isc/net.h> #include <isc/once.h> #include <isc/platform.h> @@ -296,7 +295,6 @@ struct isc__socket { /* Not locked. */ isc_socket_t common; isc__socketmgr_t *manager; - isc_mutex_t lock; isc_sockettype_t type; /* Locked by socket lock. */ @@ -350,8 +348,6 @@ struct isc__socket { struct isc__socketmgr { /* Not locked. */ isc_socketmgr_t common; - isc_mutex_t lock; - isc_mutex_t *fdlock; #ifdef USE_KQUEUE int kqueue_fd; int nevents; @@ -367,7 +363,6 @@ struct isc__socketmgr { #endif /* USE_SELECT */ unsigned int maxsocks; - /* Locked by fdlock. */ isc__socket_t **fds; int *fdstate; #if defined(USE_EPOLL) @@ -715,12 +710,10 @@ watch_fd(isc__socketmgr_t *manager, int fd, int msg) { return (result); #elif defined(USE_SELECT) - LOCK(&manager->lock); if (msg == SELECT_POKE_READ) FD_SET(fd, manager->read_fds); if (msg == SELECT_POKE_WRITE) FD_SET(fd, manager->write_fds); - UNLOCK(&manager->lock); return (result); #endif @@ -769,12 +762,10 @@ unwatch_fd(isc__socketmgr_t *manager, int fd, int msg) { } return (result); #elif defined(USE_SELECT) - LOCK(&manager->lock); if (msg == SELECT_POKE_READ) FD_CLR(fd, manager->read_fds); else if (msg == SELECT_POKE_WRITE) FD_CLR(fd, manager->write_fds); - UNLOCK(&manager->lock); return (result); #endif @@ -783,7 +774,6 @@ unwatch_fd(isc__socketmgr_t *manager, int fd, int msg) { static void wakeup_socket(isc__socketmgr_t *manager, int fd, int msg) { isc_result_t result; - int lockid = FDLOCK_ID(fd); /* * This is a wakeup on a socket. If the socket is not in the @@ -803,27 +793,20 @@ wakeup_socket(isc__socketmgr_t *manager, int fd, int msg) { return; } - LOCK(&manager->fdlock[lockid]); if (manager->fdstate[fd] == CLOSE_PENDING) { - UNLOCK(&manager->fdlock[lockid]); /* * We accept (and ignore) any error from unwatch_fd() as we are * closing the socket, hoping it doesn't leave dangling state in * the kernel. - * Note that unwatch_fd() must be called after releasing the - * fdlock; otherwise it could cause deadlock due to a lock order - * reversal. */ (void)unwatch_fd(manager, fd, SELECT_POKE_READ); (void)unwatch_fd(manager, fd, SELECT_POKE_WRITE); return; } if (manager->fdstate[fd] != MANAGED) { - UNLOCK(&manager->fdlock[lockid]); return; } - UNLOCK(&manager->fdlock[lockid]); /* * Set requested bit. @@ -1728,19 +1711,16 @@ doio_send(isc__socket_t *sock, isc_socketevent_t *dev) { static void socketclose(isc__socketmgr_t *manager, isc__socket_t *sock, int fd) { isc_sockettype_t type = sock->type; - int lockid = FDLOCK_ID(fd); /* * No one has this socket open, so the watcher doesn't have to be * poked, and the socket doesn't have to be locked. */ - LOCK(&manager->fdlock[lockid]); manager->fds[fd] = NULL; if (type == isc_sockettype_fdwatch) manager->fdstate[fd] = CLOSED; else manager->fdstate[fd] = CLOSE_PENDING; - UNLOCK(&manager->fdlock[lockid]); if (type == isc_sockettype_fdwatch) { /* * The caller may close the socket once this function returns, @@ -1765,7 +1745,6 @@ socketclose(isc__socketmgr_t *manager, isc__socket_t *sock, int fd) { * efficiently) */ #ifdef USE_SELECT - LOCK(&manager->lock); if (manager->maxfd == fd) { int i; @@ -1773,17 +1752,13 @@ socketclose(isc__socketmgr_t *manager, isc__socket_t *sock, int fd) { for (i = fd - 1; i >= 0; i--) { lockid = FDLOCK_ID(i); - LOCK(&manager->fdlock[lockid]); if (manager->fdstate[i] == MANAGED) { manager->maxfd = i; - UNLOCK(&manager->fdlock[lockid]); break; } - UNLOCK(&manager->fdlock[lockid]); } } - UNLOCK(&manager->lock); #endif /* USE_SELECT */ } @@ -1807,14 +1782,10 @@ destroy(isc__socket_t **sockp) { socketclose(manager, sock, fd); } - LOCK(&manager->lock); - ISC_LIST_UNLINK(manager->socklist, sock, link); /* can't unlock manager as its memory context is still used */ free_socket(sockp); - - UNLOCK(&manager->lock); } static isc_result_t @@ -1822,7 +1793,6 @@ allocate_socket(isc__socketmgr_t *manager, isc_sockettype_t type, isc__socket_t **socketp) { isc__socket_t *sock; - isc_result_t result; sock = malloc(sizeof(*sock)); @@ -1863,16 +1833,6 @@ allocate_socket(isc__socketmgr_t *manager, isc_sockettype_t type, sock->pktdscp = 0; /* - * Initialize the lock. - */ - result = isc_mutex_init(&sock->lock); - if (result != ISC_R_SUCCESS) { - sock->common.magic = 0; - sock->common.impmagic = 0; - goto error; - } - - /* * Initialize readable and writable events. */ ISC_EVENT_INIT(&sock->readable_ev, sizeof(intev_t), @@ -1887,11 +1847,6 @@ allocate_socket(isc__socketmgr_t *manager, isc_sockettype_t type, *socketp = sock; return (ISC_R_SUCCESS); - - error: - free(sock); - - return (result); } /* @@ -1919,8 +1874,6 @@ free_socket(isc__socket_t **socketp) { sock->common.magic = 0; sock->common.impmagic = 0; - DESTROYLOCK(&sock->lock); - free(sock); *socketp = NULL; @@ -2399,21 +2352,17 @@ socket_create(isc_socketmgr_t *manager0, int pf, isc_sockettype_t type, */ lockid = FDLOCK_ID(sock->fd); - LOCK(&manager->fdlock[lockid]); manager->fds[sock->fd] = sock; manager->fdstate[sock->fd] = MANAGED; #if defined(USE_EPOLL) manager->epoll_events[sock->fd] = 0; #endif - UNLOCK(&manager->fdlock[lockid]); - LOCK(&manager->lock); ISC_LIST_APPEND(manager->socklist, sock, link); #ifdef USE_SELECT if (manager->maxfd < sock->fd) manager->maxfd = sock->fd; #endif - UNLOCK(&manager->lock); socket_log(sock, NULL, CREATION, dup_socket != NULL ? "dupped" : "created"); @@ -2456,10 +2405,8 @@ isc__socket_open(isc_socket_t *sock0) { REQUIRE(VALID_SOCKET(sock)); - LOCK(&sock->lock); REQUIRE(sock->references == 1); REQUIRE(sock->type != isc_sockettype_fdwatch); - UNLOCK(&sock->lock); /* * We don't need to retain the lock hereafter, since no one else has * this socket. @@ -2471,21 +2418,16 @@ isc__socket_open(isc_socket_t *sock0) { sock->fd = -1; if (result == ISC_R_SUCCESS) { - int lockid = FDLOCK_ID(sock->fd); - LOCK(&sock->manager->fdlock[lockid]); sock->manager->fds[sock->fd] = sock; sock->manager->fdstate[sock->fd] = MANAGED; #if defined(USE_EPOLL) sock->manager->epoll_events[sock->fd] = 0; #endif - UNLOCK(&sock->manager->fdlock[lockid]); #ifdef USE_SELECT - LOCK(&sock->manager->lock); if (sock->manager->maxfd < sock->fd) sock->manager->maxfd = sock->fd; - UNLOCK(&sock->manager->lock); #endif } @@ -2534,21 +2476,17 @@ isc__socket_fdwatchcreate(isc_socketmgr_t *manager0, int fd, int flags, */ lockid = FDLOCK_ID(sock->fd); - LOCK(&manager->fdlock[lockid]); manager->fds[sock->fd] = sock; manager->fdstate[sock->fd] = MANAGED; #if defined(USE_EPOLL) manager->epoll_events[sock->fd] = 0; #endif - UNLOCK(&manager->fdlock[lockid]); - LOCK(&manager->lock); ISC_LIST_APPEND(manager->socklist, sock, link); #ifdef USE_SELECT if (manager->maxfd < sock->fd) manager->maxfd = sock->fd; #endif - UNLOCK(&manager->lock); if (flags & ISC_SOCKFDWATCH_READ) select_poke(sock->manager, sock->fd, SELECT_POKE_READ); @@ -2580,7 +2518,6 @@ isc__socket_fdwatchpoke(isc_socket_t *sock0, int flags) */ if ((flags & (ISC_SOCKFDWATCH_READ | ISC_SOCKFDWATCH_WRITE)) != 0) { - LOCK(&sock->lock); if (((flags & ISC_SOCKFDWATCH_READ) != 0) && !sock->pending_recv) select_poke(sock->manager, sock->fd, @@ -2589,7 +2526,6 @@ isc__socket_fdwatchpoke(isc_socket_t *sock0, int flags) !sock->pending_send) select_poke(sock->manager, sock->fd, SELECT_POKE_WRITE); - UNLOCK(&sock->lock); } socket_log(sock, NULL, TRACE, "fdwatch-poked flags: %d", flags); @@ -2607,9 +2543,7 @@ isc__socket_attach(isc_socket_t *sock0, isc_socket_t **socketp) { REQUIRE(VALID_SOCKET(sock)); REQUIRE(socketp != NULL && *socketp == NULL); - LOCK(&sock->lock); sock->references++; - UNLOCK(&sock->lock); *socketp = (isc_socket_t *)sock; } @@ -2627,12 +2561,10 @@ isc__socket_detach(isc_socket_t **socketp) { sock = (isc__socket_t *)*socketp; REQUIRE(VALID_SOCKET(sock)); - LOCK(&sock->lock); REQUIRE(sock->references > 0); sock->references--; if (sock->references == 0) kill_socket = ISC_TRUE; - UNLOCK(&sock->lock); if (kill_socket) destroy(&sock); @@ -2649,7 +2581,6 @@ isc__socket_close(isc_socket_t *sock0) { fflush(stdout); REQUIRE(VALID_SOCKET(sock)); - LOCK(&sock->lock); REQUIRE(sock->references == 1); REQUIRE(sock->type != isc_sockettype_fdwatch); @@ -2676,7 +2607,6 @@ isc__socket_close(isc_socket_t *sock0) { sock->bound = 0; isc_sockaddr_any(&sock->peer_address); - UNLOCK(&sock->lock); socketclose(manager, sock, fd); @@ -2888,7 +2818,6 @@ internal_accept(isc_task_t *me, isc_event_t *ev) { sock = ev->ev_sender; INSIST(VALID_SOCKET(sock)); - LOCK(&sock->lock); socket_log(sock, NULL, TRACE, "internal_accept called, locked socket"); @@ -2902,7 +2831,6 @@ internal_accept(isc_task_t *me, isc_event_t *ev) { INSIST(sock->references > 0); sock->references--; /* the internal event is done with this socket */ if (sock->references == 0) { - UNLOCK(&sock->lock); destroy(&sock); return; } @@ -2913,7 +2841,6 @@ internal_accept(isc_task_t *me, isc_event_t *ev) { */ dev = ISC_LIST_HEAD(sock->accept_list); if (dev == NULL) { - UNLOCK(&sock->lock); return; } @@ -3033,8 +2960,6 @@ internal_accept(isc_task_t *me, isc_event_t *ev) { if (!ISC_LIST_EMPTY(sock->accept_list)) select_poke(sock->manager, sock->fd, SELECT_POKE_ACCEPT); - UNLOCK(&sock->lock); - if (fd != -1) { result = make_nonblock(fd); if (result != ISC_R_SUCCESS) { @@ -3047,8 +2972,6 @@ internal_accept(isc_task_t *me, isc_event_t *ev) { * -1 means the new socket didn't happen. */ if (fd != -1) { - int lockid = FDLOCK_ID(fd); - NEWCONNSOCK(dev)->fd = fd; NEWCONNSOCK(dev)->bound = 1; NEWCONNSOCK(dev)->connected = 1; @@ -3073,15 +2996,11 @@ internal_accept(isc_task_t *me, isc_event_t *ev) { NEWCONNSOCK(dev)->active = 1; } - LOCK(&manager->fdlock[lockid]); manager->fds[fd] = NEWCONNSOCK(dev); manager->fdstate[fd] = MANAGED; #if defined(USE_EPOLL) manager->epoll_events[fd] = 0; #endif - UNLOCK(&manager->fdlock[lockid]); - - LOCK(&manager->lock); #ifdef USE_SELECT if (manager->maxfd < fd) @@ -3093,9 +3012,6 @@ internal_accept(isc_task_t *me, isc_event_t *ev) { dev->newsocket); ISC_LIST_APPEND(manager->socklist, NEWCONNSOCK(dev), link); - - UNLOCK(&manager->lock); - } else { NEWCONNSOCK(dev)->references--; free_socket((isc__socket_t **)&dev->newsocket); @@ -3113,7 +3029,6 @@ internal_accept(isc_task_t *me, isc_event_t *ev) { soft_error: select_poke(sock->manager, sock->fd, SELECT_POKE_ACCEPT); - UNLOCK(&sock->lock); return; } @@ -3128,7 +3043,6 @@ internal_recv(isc_task_t *me, isc_event_t *ev) { sock = ev->ev_sender; INSIST(VALID_SOCKET(sock)); - LOCK(&sock->lock); socket_log(sock, NULL, IOEVENT, "internal_recv: task %p got event %p", me, ev); @@ -3138,7 +3052,6 @@ internal_recv(isc_task_t *me, isc_event_t *ev) { INSIST(sock->references > 0); sock->references--; /* the internal event is done with this socket */ if (sock->references == 0) { - UNLOCK(&sock->lock); destroy(&sock); return; } @@ -3178,8 +3091,6 @@ internal_recv(isc_task_t *me, isc_event_t *ev) { poke: if (!ISC_LIST_EMPTY(sock->recv_list)) select_poke(sock->manager, sock->fd, SELECT_POKE_READ); - - UNLOCK(&sock->lock); } static void @@ -3194,8 +3105,6 @@ internal_send(isc_task_t *me, isc_event_t *ev) { */ sock = (isc__socket_t *)ev->ev_sender; INSIST(VALID_SOCKET(sock)); - - LOCK(&sock->lock); socket_log(sock, NULL, IOEVENT, "internal_send: task %p got event %p", me, ev); @@ -3205,7 +3114,6 @@ internal_send(isc_task_t *me, isc_event_t *ev) { INSIST(sock->references > 0); sock->references--; /* the internal event is done with this socket */ if (sock->references == 0) { - UNLOCK(&sock->lock); destroy(&sock); return; } @@ -3232,8 +3140,6 @@ internal_send(isc_task_t *me, isc_event_t *ev) { poke: if (!ISC_LIST_EMPTY(sock->send_list)) select_poke(sock->manager, sock->fd, SELECT_POKE_WRITE); - - UNLOCK(&sock->lock); } static void @@ -3249,31 +3155,24 @@ internal_fdwatch_write(isc_task_t *me, isc_event_t *ev) { sock = (isc__socket_t *)ev->ev_sender; INSIST(VALID_SOCKET(sock)); - LOCK(&sock->lock); socket_log(sock, NULL, IOEVENT, "internal_fdwatch_write: task %p got event %p", me, ev); INSIST(sock->pending_send == 1); - UNLOCK(&sock->lock); more_data = (sock->fdwatchcb)(me, (isc_socket_t *)sock, sock->fdwatcharg, ISC_SOCKFDWATCH_WRITE); - LOCK(&sock->lock); - sock->pending_send = 0; INSIST(sock->references > 0); sock->references--; /* the internal event is done with this socket */ if (sock->references == 0) { - UNLOCK(&sock->lock); destroy(&sock); return; } if (more_data) select_poke(sock->manager, sock->fd, SELECT_POKE_WRITE); - - UNLOCK(&sock->lock); } static void @@ -3289,31 +3188,24 @@ internal_fdwatch_read(isc_task_t *me, isc_event_t *ev) { sock = (isc__socket_t *)ev->ev_sender; INSIST(VALID_SOCKET(sock)); - LOCK(&sock->lock); socket_log(sock, NULL, IOEVENT, "internal_fdwatch_read: task %p got event %p", me, ev); INSIST(sock->pending_recv == 1); - UNLOCK(&sock->lock); more_data = (sock->fdwatchcb)(me, (isc_socket_t *)sock, sock->fdwatcharg, ISC_SOCKFDWATCH_READ); - LOCK(&sock->lock); - sock->pending_recv = 0; INSIST(sock->references > 0); sock->references--; /* the internal event is done with this socket */ if (sock->references == 0) { - UNLOCK(&sock->lock); destroy(&sock); return; } if (more_data) select_poke(sock->manager, sock->fd, SELECT_POKE_READ); - - UNLOCK(&sock->lock); } /* @@ -3325,31 +3217,23 @@ process_fd(isc__socketmgr_t *manager, int fd, isc_boolean_t readable, isc_boolean_t writeable) { isc__socket_t *sock; - isc_boolean_t unlock_sock; isc_boolean_t unwatch_read = ISC_FALSE, unwatch_write = ISC_FALSE; - int lockid = FDLOCK_ID(fd); /* * If the socket is going to be closed, don't do more I/O. */ - LOCK(&manager->fdlock[lockid]); if (manager->fdstate[fd] == CLOSE_PENDING) { - UNLOCK(&manager->fdlock[lockid]); - (void)unwatch_fd(manager, fd, SELECT_POKE_READ); (void)unwatch_fd(manager, fd, SELECT_POKE_WRITE); return; } sock = manager->fds[fd]; - unlock_sock = ISC_FALSE; if (readable) { if (sock == NULL) { unwatch_read = ISC_TRUE; goto check_write; } - unlock_sock = ISC_TRUE; - LOCK(&sock->lock); if (!SOCK_DEAD(sock)) { if (sock->listener) dispatch_accept(sock); @@ -3364,10 +3248,6 @@ check_write: unwatch_write = ISC_TRUE; goto unlock_fd; } - if (!unlock_sock) { - unlock_sock = ISC_TRUE; - LOCK(&sock->lock); - } if (!SOCK_DEAD(sock)) { if (sock->connecting) dispatch_connect(sock); @@ -3376,11 +3256,8 @@ check_write: } unwatch_write = ISC_TRUE; } - if (unlock_sock) - UNLOCK(&sock->lock); unlock_fd: - UNLOCK(&manager->fdlock[lockid]); if (unwatch_read) (void)unwatch_fd(manager, fd, SELECT_POKE_READ); if (unwatch_write) @@ -3606,7 +3483,6 @@ isc_result_t isc__socketmgr_create2(isc_socketmgr_t **managerp, unsigned int maxsocks) { - int i; isc__socketmgr_t *manager; isc_result_t result; @@ -3659,24 +3535,6 @@ isc__socketmgr_create2(isc_socketmgr_t **managerp, manager->common.impmagic = SOCKET_MANAGER_MAGIC; memset(manager->fds, 0, manager->maxsocks * sizeof(isc_socket_t *)); ISC_LIST_INIT(manager->socklist); - result = isc_mutex_init(&manager->lock); - if (result != ISC_R_SUCCESS) - goto free_manager; - manager->fdlock = malloc(FDLOCK_COUNT * sizeof(isc_mutex_t)); - if (manager->fdlock == NULL) { - result = ISC_R_NOMEMORY; - goto cleanup_lock; - } - for (i = 0; i < FDLOCK_COUNT; i++) { - result = isc_mutex_init(&manager->fdlock[i]); - if (result != ISC_R_SUCCESS) { - while (--i >= 0) - DESTROYLOCK(&manager->fdlock[i]); - free(manager->fdlock); - manager->fdlock = NULL; - goto cleanup_lock; - } - } manager->refs = 1; @@ -3696,18 +3554,7 @@ isc__socketmgr_create2(isc_socketmgr_t **managerp, cleanup: - -cleanup_lock: - if (manager->fdlock != NULL) { - for (i = 0; i < FDLOCK_COUNT; i++) - DESTROYLOCK(&manager->fdlock[i]); - } - DESTROYLOCK(&manager->lock); - free_manager: - if (manager->fdlock != NULL) { - free(manager->fdlock); - } #if defined(USE_EPOLL) if (manager->epoll_events != NULL) { free(manager->epoll_events); @@ -3755,19 +3602,13 @@ isc__socketmgr_destroy(isc_socketmgr_t **managerp) { } socketmgr = NULL; - LOCK(&manager->lock); - /* * Wait for all sockets to be destroyed. */ while (!ISC_LIST_EMPTY(manager->socklist)) { - UNLOCK(&manager->lock); isc__taskmgr_dispatch(NULL); - LOCK(&manager->lock); } - UNLOCK(&manager->lock); - /* * Here, poke our select/poll thread. Do this by closing the write * half of the pipe, which will send EOF to the read half. @@ -3790,12 +3631,6 @@ isc__socketmgr_destroy(isc_socketmgr_t **managerp) { free(manager->fds); free(manager->fdstate); - if (manager->fdlock != NULL) { - for (i = 0; i < FDLOCK_COUNT; i++) - DESTROYLOCK(&manager->fdlock[i]); - free(manager->fdlock); - } - DESTROYLOCK(&manager->lock); manager->common.magic = 0; manager->common.impmagic = 0; free(manager); @@ -3810,7 +3645,6 @@ socket_recv(isc__socket_t *sock, isc_socketevent_t *dev, isc_task_t *task, unsigned int flags) { int io_state; - isc_boolean_t have_lock = ISC_FALSE; isc_task_t *ntask = NULL; isc_result_t result = ISC_R_SUCCESS; @@ -3819,9 +3653,6 @@ socket_recv(isc__socket_t *sock, isc_socketevent_t *dev, isc_task_t *task, if (sock->type == isc_sockettype_udp) { io_state = doio_recv(sock, dev); } else { - LOCK(&sock->lock); - have_lock = ISC_TRUE; - if (ISC_LIST_EMPTY(sock->recv_list)) io_state = doio_recv(sock, dev); else @@ -3839,11 +3670,6 @@ socket_recv(isc__socket_t *sock, isc_socketevent_t *dev, isc_task_t *task, isc_task_attach(task, &ntask); dev->attributes |= ISC_SOCKEVENTATTR_ATTACHED; - if (!have_lock) { - LOCK(&sock->lock); - have_lock = ISC_TRUE; - } - /* * Enqueue the request. If the socket was previously not being * watched, poke the watcher to start paying attention to it. @@ -3871,9 +3697,6 @@ socket_recv(isc__socket_t *sock, isc_socketevent_t *dev, isc_task_t *task, break; } - if (have_lock) - UNLOCK(&sock->lock); - return (result); } @@ -3993,7 +3816,6 @@ socket_send(isc__socket_t *sock, isc_socketevent_t *dev, isc_task_t *task, unsigned int flags) { int io_state; - isc_boolean_t have_lock = ISC_FALSE; isc_task_t *ntask = NULL; isc_result_t result = ISC_R_SUCCESS; @@ -4021,9 +3843,6 @@ socket_send(isc__socket_t *sock, isc_socketevent_t *dev, isc_task_t *task, if (sock->type == isc_sockettype_udp) io_state = doio_send(sock, dev); else { - LOCK(&sock->lock); - have_lock = ISC_TRUE; - if (ISC_LIST_EMPTY(sock->send_list)) io_state = doio_send(sock, dev); else @@ -4040,11 +3859,6 @@ socket_send(isc__socket_t *sock, isc_socketevent_t *dev, isc_task_t *task, isc_task_attach(task, &ntask); dev->attributes |= ISC_SOCKEVENTATTR_ATTACHED; - if (!have_lock) { - LOCK(&sock->lock); - have_lock = ISC_TRUE; - } - /* * Enqueue the request. If the socket was previously * not being watched, poke the watcher to start @@ -4074,9 +3888,6 @@ socket_send(isc__socket_t *sock, isc_socketevent_t *dev, isc_task_t *task, break; } - if (have_lock) - UNLOCK(&sock->lock); - return (result); } @@ -4384,13 +4195,10 @@ isc__socket_bind(isc_socket_t *sock0, isc_sockaddr_t *sockaddr, REQUIRE(VALID_SOCKET(sock)); - LOCK(&sock->lock); - INSIST(!sock->bound); INSIST(!sock->dupped); if (sock->pf != sockaddr->type.sa.sa_family) { - UNLOCK(&sock->lock); return (ISC_R_FAMILYMISMATCH); } @@ -4413,8 +4221,6 @@ isc__socket_bind(isc_socket_t *sock0, isc_sockaddr_t *sockaddr, bind_socket: #endif if (bind(sock->fd, &sockaddr->type.sa, sockaddr->length) < 0) { - - UNLOCK(&sock->lock); switch (errno) { case EACCES: return (ISC_R_NOPERM); @@ -4435,7 +4241,6 @@ isc__socket_bind(isc_socket_t *sock0, isc_sockaddr_t *sockaddr, socket_log(sock, sockaddr, TRACE, "bound"); sock->bound = 1; - UNLOCK(&sock->lock); return (ISC_R_SUCCESS); } @@ -4492,8 +4297,6 @@ isc__socket_listen(isc_socket_t *sock0, unsigned int backlog) { REQUIRE(VALID_SOCKET(sock)); - LOCK(&sock->lock); - REQUIRE(!sock->listener); REQUIRE(sock->bound); REQUIRE(sock->type == isc_sockettype_tcp || @@ -4503,7 +4306,6 @@ isc__socket_listen(isc_socket_t *sock0, unsigned int backlog) { backlog = SOMAXCONN; if (listen(sock->fd, (int)backlog) < 0) { - UNLOCK(&sock->lock); isc__strerror(errno, strbuf, sizeof(strbuf)); UNEXPECTED_ERROR(__FILE__, __LINE__, "listen: %s", strbuf); @@ -4513,7 +4315,6 @@ isc__socket_listen(isc_socket_t *sock0, unsigned int backlog) { sock->listener = 1; - UNLOCK(&sock->lock); return (ISC_R_SUCCESS); } @@ -4536,8 +4337,6 @@ isc__socket_accept(isc_socket_t *sock0, manager = sock->manager; REQUIRE(VALID_MANAGER(manager)); - LOCK(&sock->lock); - REQUIRE(sock->listener); /* @@ -4549,7 +4348,6 @@ isc__socket_accept(isc_socket_t *sock0, isc_event_allocate(task, ISC_SOCKEVENT_NEWCONN, action, arg, sizeof(*dev)); if (dev == NULL) { - UNLOCK(&sock->lock); return (ISC_R_NOMEMORY); } ISC_LINK_INIT(dev, ev_link); @@ -4557,7 +4355,6 @@ isc__socket_accept(isc_socket_t *sock0, result = allocate_socket(manager, sock->type, &nsock); if (result != ISC_R_SUCCESS) { isc_event_free(ISC_EVENT_PTR(&dev)); - UNLOCK(&sock->lock); return (result); } @@ -4569,7 +4366,6 @@ isc__socket_accept(isc_socket_t *sock0, free_socket(&nsock); isc_task_detach(&ntask); isc_event_free(ISC_EVENT_PTR(&dev)); - UNLOCK(&sock->lock); return (ISC_R_SHUTTINGDOWN); } nsock->references++; @@ -4590,7 +4386,6 @@ isc__socket_accept(isc_socket_t *sock0, if (do_poke) select_poke(manager, sock->fd, SELECT_POKE_ACCEPT); - UNLOCK(&sock->lock); return (ISC_R_SUCCESS); } @@ -4618,8 +4413,6 @@ isc__socket_connect(isc_socket_t *sock0, isc_sockaddr_t *addr, if (isc_sockaddr_ismulticast(addr)) return (ISC_R_MULTICAST); - LOCK(&sock->lock); - REQUIRE(!sock->connecting); dev = (isc_socket_connev_t *)isc_event_allocate(sock, @@ -4627,7 +4420,6 @@ isc__socket_connect(isc_socket_t *sock0, isc_sockaddr_t *addr, action, arg, sizeof(*dev)); if (dev == NULL) { - UNLOCK(&sock->lock); return (ISC_R_NOMEMORY); } ISC_LINK_INIT(dev, ev_link); @@ -4677,7 +4469,6 @@ isc__socket_connect(isc_socket_t *sock0, isc_sockaddr_t *addr, UNEXPECTED_ERROR(__FILE__, __LINE__, "connect(%s) %d/%s", addrbuf, errno, strbuf); - UNLOCK(&sock->lock); isc_event_free(ISC_EVENT_PTR(&dev)); return (ISC_R_UNEXPECTED); @@ -4685,7 +4476,6 @@ isc__socket_connect(isc_socket_t *sock0, isc_sockaddr_t *addr, sock->connected = 0; isc_task_send(task, ISC_EVENT_PTR(&dev)); - UNLOCK(&sock->lock); return (ISC_R_SUCCESS); } @@ -4699,9 +4489,6 @@ isc__socket_connect(isc_socket_t *sock0, isc_sockaddr_t *addr, dev->result = ISC_R_SUCCESS; isc_task_send(task, ISC_EVENT_PTR(&dev)); - UNLOCK(&sock->lock); - - return (ISC_R_SUCCESS); } @@ -4726,7 +4513,6 @@ isc__socket_connect(isc_socket_t *sock0, isc_sockaddr_t *addr, sock->connect_ev = dev; - UNLOCK(&sock->lock); return (ISC_R_SUCCESS); } @@ -4749,8 +4535,6 @@ internal_connect(isc_task_t *me, isc_event_t *ev) { sock = ev->ev_sender; INSIST(VALID_SOCKET(sock)); - LOCK(&sock->lock); - /* * When the internal event was sent the reference count was bumped * to keep the socket around for us. Decrement the count here. @@ -4758,7 +4542,6 @@ internal_connect(isc_task_t *me, isc_event_t *ev) { INSIST(sock->references > 0); sock->references--; if (sock->references == 0) { - UNLOCK(&sock->lock); destroy(&sock); return; } @@ -4769,7 +4552,6 @@ internal_connect(isc_task_t *me, isc_event_t *ev) { dev = sock->connect_ev; if (dev == NULL) { INSIST(!sock->connecting); - UNLOCK(&sock->lock); return; } @@ -4795,8 +4577,6 @@ internal_connect(isc_task_t *me, isc_event_t *ev) { sock->connecting = 1; select_poke(sock->manager, sock->fd, SELECT_POKE_CONNECT); - UNLOCK(&sock->lock); - return; } @@ -4838,8 +4618,6 @@ internal_connect(isc_task_t *me, isc_event_t *ev) { sock->connect_ev = NULL; - UNLOCK(&sock->lock); - task = dev->ev_sender; dev->ev_sender = sock; isc_task_sendanddetach(&task, ISC_EVENT_PTR(&dev)); @@ -4853,8 +4631,6 @@ isc__socket_getpeername(isc_socket_t *sock0, isc_sockaddr_t *addressp) { REQUIRE(VALID_SOCKET(sock)); REQUIRE(addressp != NULL); - LOCK(&sock->lock); - if (sock->connected) { *addressp = sock->peer_address; result = ISC_R_SUCCESS; @@ -4862,8 +4638,6 @@ isc__socket_getpeername(isc_socket_t *sock0, isc_sockaddr_t *addressp) { result = ISC_R_NOTCONNECTED; } - UNLOCK(&sock->lock); - return (result); } @@ -4877,8 +4651,6 @@ isc__socket_getsockname(isc_socket_t *sock0, isc_sockaddr_t *addressp) { REQUIRE(VALID_SOCKET(sock)); REQUIRE(addressp != NULL); - LOCK(&sock->lock); - if (!sock->bound) { result = ISC_R_NOTBOUND; goto out; @@ -4897,8 +4669,6 @@ isc__socket_getsockname(isc_socket_t *sock0, isc_sockaddr_t *addressp) { addressp->length = (unsigned int)len; out: - UNLOCK(&sock->lock); - return (result); } @@ -4919,8 +4689,6 @@ isc__socket_cancel(isc_socket_t *sock0, isc_task_t *task, unsigned int how) { if (how == 0) return; - LOCK(&sock->lock); - /* * All of these do the same thing, more or less. * Each will: @@ -5024,7 +4792,6 @@ isc__socket_cancel(isc_socket_t *sock0, isc_task_t *task, unsigned int how) { } } - UNLOCK(&sock->lock); } isc_sockettype_t @@ -5043,10 +4810,7 @@ isc__socket_isbound(isc_socket_t *sock0) { REQUIRE(VALID_SOCKET(sock)); - LOCK(&sock->lock); val = ((sock->bound) ? ISC_TRUE : ISC_FALSE); - UNLOCK(&sock->lock); - return (val); } @@ -5232,10 +4996,8 @@ isc__socket_setname(isc_socket_t *socket0, const char *name, void *tag) { REQUIRE(VALID_SOCKET(sock)); - LOCK(&sock->lock); strlcpy(sock->name, name, sizeof(sock->name)); sock->tag = tag; - UNLOCK(&sock->lock); } const char * |
