Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 19 Jun 2004 03:23:14 +0000 (UTC)
From:      Robert Watson <rwatson@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/kern uipc_socket.c uipc_socket2.c uipc_syscalls.c
Message-ID:  <200406190323.i5J3NEQB040852@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
rwatson     2004-06-19 03:23:14 UTC

  FreeBSD src repository

  Modified files:
    sys/kern             uipc_socket.c uipc_socket2.c 
                         uipc_syscalls.c 
  Log:
  Assert socket buffer lock in sb_lock() to protect socket buffer sleep
  lock state.  Convert tsleep() into msleep() with socket buffer mutex
  as argument.  Hold socket buffer lock over sbunlock() to protect sleep
  lock state.
  
  Assert socket buffer lock in sbwait() to protect the socket buffer
  wait state.  Convert tsleep() into msleep() with socket buffer mutex
  as argument.
  
  Modify sofree(), sosend(), and soreceive() to acquire SOCKBUF_LOCK()
  in order to call into these functions with the lock, as well as to
  start protecting other socket buffer use in their implementation.  Drop
  the socket buffer mutexes around calls into the protocol layer, around
  potentially blocking operations, for copying to/from user space, and
  VM operations relating to zero-copy.  Assert the socket buffer mutex
  strategically after code sections or at the beginning of loops.  In
  some cases, modify return code to ensure locks are properly dropped.
  
  Convert the potentially blocking allocation of storage for the remote
  address in soreceive() into a non-blocking allocation; we may wish to
  move the allocation earlier so that it can block prior to acquisition
  of the socket buffer lock.
  
  Drop some spl use.
  
  NOTE: Some races exist in the current structuring of sosend() and
  soreceive().  This commit only merges basic socket locking in this
  code; follow-up commits will close additional races.  As merged,
  these changes are not sufficient to run without Giant safely.
  
  Reviewed by:    juli, tjr
  
  Revision  Changes    Path
  1.182     +60 -25    src/sys/kern/uipc_socket.c
  1.133     +6 -2      src/sys/kern/uipc_socket2.c
  1.194     +21 -0     src/sys/kern/uipc_syscalls.c



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200406190323.i5J3NEQB040852>