The branch main has been updated by glebius:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=a37e4fd1ea8ccb2a5e54083d7cfc7b1b1784072d

commit a37e4fd1ea8ccb2a5e54083d7cfc7b1b1784072d
Author:     Gleb Smirnoff <gleb...@freebsd.org>
AuthorDate: 2021-10-01 20:38:24 +0000
Commit:     Gleb Smirnoff <gleb...@freebsd.org>
CommitDate: 2021-10-01 20:38:24 +0000

    Re-style dfcef8771484 to keep the code and variables related to
    listening sockets separated from code for generic sockets.
    
    No objection:   markj
---
 sys/kern/uipc_socket.c | 30 ++++++++++++++++++------------
 1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
index 1f999108dd71..267a33feac3b 100644
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -1225,9 +1225,8 @@ int
 soclose(struct socket *so)
 {
        struct accept_queue lqueue;
-       struct socket *sp, *tsp;
        int error = 0;
-       bool last __diagused;
+       bool listening, last __diagused;
 
        KASSERT(!(so->so_state & SS_NOFDREF), ("soclose: SS_NOFDREF on enter"));
 
@@ -1261,9 +1260,11 @@ drop:
        if (so->so_proto->pr_usrreqs->pru_close != NULL)
                (*so->so_proto->pr_usrreqs->pru_close)(so);
 
-       TAILQ_INIT(&lqueue);
        SOCK_LOCK(so);
-       if (SOLISTENING(so)) {
+       if ((listening = SOLISTENING(so))) {
+               struct socket *sp;
+
+               TAILQ_INIT(&lqueue);
                TAILQ_SWAP(&lqueue, &so->sol_incomp, socket, so_list);
                TAILQ_CONCAT(&lqueue, &so->sol_comp, so_list);
 
@@ -1282,14 +1283,19 @@ drop:
        KASSERT((so->so_state & SS_NOFDREF) == 0, ("soclose: NOFDREF"));
        so->so_state |= SS_NOFDREF;
        sorele(so);
-       TAILQ_FOREACH_SAFE(sp, &lqueue, so_list, tsp) {
-               SOCK_LOCK(sp);
-               if (refcount_load(&sp->so_count) == 0) {
-                       SOCK_UNLOCK(sp);
-                       soabort(sp);
-               } else {
-                       /* See the handling of queued sockets in sofree(). */
-                       SOCK_UNLOCK(sp);
+       if (listening) {
+               struct socket *sp, *tsp;
+
+               TAILQ_FOREACH_SAFE(sp, &lqueue, so_list, tsp) {
+                       SOCK_LOCK(sp);
+                       if (refcount_load(&sp->so_count) == 0) {
+                               SOCK_UNLOCK(sp);
+                               soabort(sp);
+                       } else {
+                               /* See the handling of queued sockets
+                                  in sofree(). */
+                               SOCK_UNLOCK(sp);
+                       }
                }
        }
        CURVNET_RESTORE();
_______________________________________________
dev-commits-src-main@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"

Reply via email to