]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3543. [bug] Update socket stucture before attaching to socket
authorMark Andrews <marka@isc.org>
Wed, 3 Apr 2013 06:42:42 +0000 (17:42 +1100)
committerMark Andrews <marka@isc.org>
Wed, 3 Apr 2013 06:43:27 +0000 (17:43 +1100)
                        manager after accert. [RT #33084]

CHANGES
lib/isc/unix/socket.c

diff --git a/CHANGES b/CHANGES
index e146b7d2c9189b20051e911c5858e48533ea8838..3110adb37501405b5cdba9a7b89596630e6b2b12 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+3543.  [bug]           Update socket stucture before attaching to socket
+                       manager after accert. [RT #33084]
+
 3541.  [bug]           The parts if libdns was not being properly initialized
                        in when built in libexport mode. [RT #33028]
 
index 8dff44d7800e0c2e113f68d33f4c57c7760f574b..7bd12aaa31eda5edc04ce2815fe8f872d850688b 100644 (file)
@@ -3274,14 +3274,6 @@ internal_accept(isc_task_t *me, isc_event_t *ev) {
        if (fd != -1) {
                int lockid = FDLOCK_ID(fd);
 
-               LOCK(&manager->fdlock[lockid]);
-               manager->fds[fd] = NEWCONNSOCK(dev);
-               manager->fdstate[fd] = MANAGED;
-               UNLOCK(&manager->fdlock[lockid]);
-
-               LOCK(&manager->lock);
-               ISC_LIST_APPEND(manager->socklist, NEWCONNSOCK(dev), link);
-
                NEWCONNSOCK(dev)->fd = fd;
                NEWCONNSOCK(dev)->bound = 1;
                NEWCONNSOCK(dev)->connected = 1;
@@ -3296,6 +3288,13 @@ internal_accept(isc_task_t *me, isc_event_t *ev) {
                 */
                dev->address = NEWCONNSOCK(dev)->peer_address;
 
+               LOCK(&manager->fdlock[lockid]);
+               manager->fds[fd] = NEWCONNSOCK(dev);
+               manager->fdstate[fd] = MANAGED;
+               UNLOCK(&manager->fdlock[lockid]);
+
+               LOCK(&manager->lock);
+
 #ifdef USE_SELECT
                if (manager->maxfd < fd)
                        manager->maxfd = fd;
@@ -3306,6 +3305,8 @@ internal_accept(isc_task_t *me, isc_event_t *ev) {
                           "accepted connection, new socket %p",
                           dev->newsocket);
 
+               ISC_LIST_APPEND(manager->socklist, NEWCONNSOCK(dev), link);
+
                UNLOCK(&manager->lock);
 
                inc_stats(manager->stats, sock->statsindex[STATID_ACCEPT]);