Author: ed
Date: Fri Feb 26 12:46:34 2016
New Revision: 296092
URL: https://svnweb.freebsd.org/changeset/base/296092

Log:
  Remove the errno argument from unp_drop().
  
  While there, add a comment to clarify that ECONNRESET should always be
  returned for POSIX conformance.
  
  Suggested by: Steven Hartland

Modified:
  head/sys/kern/uipc_usrreq.c

Modified: head/sys/kern/uipc_usrreq.c
==============================================================================
--- head/sys/kern/uipc_usrreq.c Fri Feb 26 12:16:11 2016        (r296091)
+++ head/sys/kern/uipc_usrreq.c Fri Feb 26 12:46:34 2016        (r296092)
@@ -280,7 +280,7 @@ static void unp_disconnect(struct unpcb 
 static void    unp_dispose(struct mbuf *);
 static void    unp_dispose_so(struct socket *so);
 static void    unp_shutdown(struct unpcb *);
-static void    unp_drop(struct unpcb *, int);
+static void    unp_drop(struct unpcb *);
 static void    unp_gc(__unused void *, int);
 static void    unp_scan(struct mbuf *, void (*)(struct filedescent **, int));
 static void    unp_discard(struct file *);
@@ -354,7 +354,7 @@ uipc_abort(struct socket *so)
        unp2 = unp->unp_conn;
        if (unp2 != NULL) {
                UNP_PCB_LOCK(unp2);
-               unp_drop(unp2, ECONNRESET);
+               unp_drop(unp2);
                UNP_PCB_UNLOCK(unp2);
        }
        UNP_PCB_UNLOCK(unp);
@@ -682,7 +682,7 @@ uipc_detach(struct socket *so)
                struct unpcb *ref = LIST_FIRST(&unp->unp_refs);
 
                UNP_PCB_LOCK(ref);
-               unp_drop(ref, ECONNRESET);
+               unp_drop(ref);
                UNP_PCB_UNLOCK(ref);
        }
        local_unp_rights = unp_rights;
@@ -1698,7 +1698,7 @@ unp_shutdown(struct unpcb *unp)
 }
 
 static void
-unp_drop(struct unpcb *unp, int errno)
+unp_drop(struct unpcb *unp)
 {
        struct socket *so = unp->unp_socket;
        struct unpcb *unp2;
@@ -1706,7 +1706,12 @@ unp_drop(struct unpcb *unp, int errno)
        UNP_LINK_WLOCK_ASSERT();
        UNP_PCB_LOCK_ASSERT(unp);
 
-       so->so_error = errno;
+       /*
+        * Regardless of whether the socket's peer dropped the connection
+        * with this socket by aborting or disconnecting, POSIX requires
+        * that ECONNRESET is returned.
+        */
+       so->so_error = ECONNRESET;
        unp2 = unp->unp_conn;
        if (unp2 == NULL)
                return;
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to