diff --git a/CHANGES b/CHANGES index e146b7d2c9..3110adb375 100644 --- 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] diff --git a/lib/isc/unix/socket.c b/lib/isc/unix/socket.c index 8dff44d780..7bd12aaa31 100644 --- a/lib/isc/unix/socket.c +++ b/lib/isc/unix/socket.c @@ -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]);