Skip to content
  • John Baldwin's avatar
    Don't require the socket lock for sorele(). · e3ba94d4
    John Baldwin authored
    Previously, sorele() always required the socket lock and dropped the
    lock if the released reference was not the last reference.  Many
    callers locked the socket lock just before calling sorele() resulting
    in a wasted lock/unlock when not dropping the last reference.
    
    Move the previous implementation of sorele() into a new
    sorele_locked() function and use it instead of sorele() for various
    places in uipc_socket.c that called sorele() while already holding the
    socket lock.
    
    The sorele() macro now uses refcount_release_if_not_last() try to drop
    the socket reference without locking the socket.  If that shortcut
    fails, it locks the socket and calls sorele_locked().
    
    Reviewed by:	kib, markj
    Sponsored by:	Chelsio Communications
    Differential Revision:	https://reviews.freebsd.org/D32741
    e3ba94d4