441 lines
12 KiB
Plaintext
441 lines
12 KiB
Plaintext
|
AfdSpinLock Usage
|
||
|
~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
ACCEPT.C
|
||
|
|
||
|
Function: AfdDeferAccept
|
||
|
Protects: Endpoint->Common.VcListening.UnacceptedConnectionListHead
|
||
|
Synopsis: Used when deferring an accept (putting a connection back
|
||
|
on the endpoint's unaccepted connection queue).
|
||
|
Strategy: None. Deferring accepted connections is a very low
|
||
|
frequency operation (and is impossible in WinSock 1.1).
|
||
|
|
||
|
|
||
|
BIND.C
|
||
|
|
||
|
Function: AfdRestartGetAddress
|
||
|
Protects: Endpoint->LocalAddress[Length]
|
||
|
Synopsis: Used when allocating an endpoint's local address buffer
|
||
|
to prevent multiple processors from allocating the buffer.
|
||
|
Strategy: None. AfdGetAddress is only called during bind() and
|
||
|
getsockname() APIs. The bind() call is certainly more
|
||
|
interesting than getsockname(), but even bind() is only
|
||
|
called once per socket, so it is unlikely there would be
|
||
|
any benefit in tuning this.
|
||
|
|
||
|
|
||
|
BLKCONN.C
|
||
|
|
||
|
Function: AfdAddFreeConnection
|
||
|
Protects: Endpoint->Common.VcListening.FreeConnectionListHead
|
||
|
Synopsis: Used when adding free connections to the endpoint's
|
||
|
free connection queue.
|
||
|
Strategy: Use SLIST for free connection queue.
|
||
|
|
||
|
Function: AfdFreeConnection
|
||
|
Protects: Endpoint->Common.VcListening.FreeConnectionListHead
|
||
|
Synopsis: Used when appending a reused connection to the endpoint's
|
||
|
free connection queue.
|
||
|
Strategy: Use SLIST for free connection queue.
|
||
|
|
||
|
Function: AfdDereferenceConnection
|
||
|
Protects: Connection->ReferenceCount
|
||
|
Synopsis: Synchronizes access to reference count member.
|
||
|
Strategy: Use InterlockedDecrement. If updated value is now zero,
|
||
|
then acquire AfdSpinLock, and recheck the value for zero.
|
||
|
If it's still zero, do the usual dereference stuff. This
|
||
|
will eliminate all spinlock acquisitions on reference/
|
||
|
dereference except the *last* dereference.
|
||
|
|
||
|
Function: AfdGetFreeConnection
|
||
|
Protects: Endpoint->Common.VcListening.FreeConnectionListHead
|
||
|
Synopsis: Used when removing a free connection from the endpoint's
|
||
|
free connection queue.
|
||
|
Strategy: Use SLIST for free connection queue.
|
||
|
|
||
|
Function: AfdGetReturnedConnection
|
||
|
Protects: Endpoint->Common.VcListening.ReturnedConnectionListHead
|
||
|
Synopsis: Used when scanning the returned connection queue for a
|
||
|
specific sequence number.
|
||
|
Strategy: None (for now).
|
||
|
|
||
|
Function: AfdReferenceConnection
|
||
|
Protects: Connection->ReferenceCount
|
||
|
Synopsis: Synchronizes access to reference count member.
|
||
|
Strategy: Use InterlockedIncrement instead.
|
||
|
|
||
|
|
||
|
BLKENDP.C
|
||
|
|
||
|
Function: AfdFreeQueuedConnections
|
||
|
Protects: Endpoint->Common.VcListening.UnacceptedConnectionListHead
|
||
|
Synopsis: Used when puring the endpoint's unaccepted connection
|
||
|
queue.
|
||
|
Strategy: None (for now).
|
||
|
|
||
|
Function: AfdDereferenceEndpoint
|
||
|
Protects: Endpoint->ReferenceCount
|
||
|
Synopsis: Synchronizes access to reference count member.
|
||
|
Strategy: Use InterlockedDecrement. If updated value is now zero,
|
||
|
then acquire AfdSpinLock, and recheck the value for zero.
|
||
|
If it's still zero, do the usual dereference stuff. This
|
||
|
will eliminate all spinlock acquisitions on reference/
|
||
|
dereference except the *last* dereference.
|
||
|
|
||
|
Function: AfdReferenceEndpoint
|
||
|
Protects: Endpoint->ReferenceCount
|
||
|
Synopsis: Synchronizes access to reference count member.
|
||
|
Strategy: Use InterlockedIncrement instead.
|
||
|
|
||
|
|
||
|
CLOSE.C
|
||
|
|
||
|
Function: AfdCleanup
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
|
||
|
CONNECT.C
|
||
|
|
||
|
Function: AfdSetupConnectDataBuffers
|
||
|
Protects: Endpoint->ConnectDataBuffers
|
||
|
Synopsis: Used to guard connect data buffers when they're moved
|
||
|
from an endpoint to a connection.
|
||
|
Strategy: Do the "double compare" trick to avoid acquiring the
|
||
|
spinlock if there are no connect data buffers on the
|
||
|
endpoint.
|
||
|
|
||
|
Function: AfdRestartConnect
|
||
|
Protects: Connection->ConnectDataBuffers
|
||
|
Synopsis: Used to guard connect data buffers after a connect
|
||
|
completes.
|
||
|
Strategy: Do the "double compare" trick to avoid acquiring the
|
||
|
spinlock if there are no connect data buffers on the
|
||
|
connection.
|
||
|
|
||
|
|
||
|
DISCONN.C
|
||
|
|
||
|
Function: AfdPartialDisconnect(1)
|
||
|
Protects: Endpoint->DisconnectMode
|
||
|
Synopsis: Used to guard the disconnect mode bits when shutting
|
||
|
down a datagram endpoint.
|
||
|
Strategy: Test a Bunch-O-Bits in the endpoint, and only if
|
||
|
at least one of these is nonzero acquire the spinlock,
|
||
|
then proceed with the current tests.
|
||
|
|
||
|
Function: AfdPartialDisconnect(2)
|
||
|
Protects: Connection->Common.Bufferring.Receive[Expedited]BytesTaken
|
||
|
Synopsis: Used to guard access to the byte counters in the connection
|
||
|
when receives are shutdown so that the connection can be
|
||
|
aborted if necessary.
|
||
|
Strategy: None (for now).
|
||
|
|
||
|
Function: AfdDisconnectEventHandler
|
||
|
Protects: Connection->ConnectDataBuffers
|
||
|
Synopsis: Used to guard disconnect data buffers when a disconnect
|
||
|
indication is received.
|
||
|
Strategy: Do the "double compare" trick to avoid acquiring the
|
||
|
spinlock if there are no connect data buffers on the
|
||
|
connection.
|
||
|
|
||
|
Function: AfdBeginAbort
|
||
|
Protects: Bunch-O-Stuff
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdBeginDisconnect
|
||
|
Protects: Bunch-O-Stuff, including disconnect buffers
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdRestartDisconnect
|
||
|
Protects: DisconnectContext->DisconnectListEntry
|
||
|
Synopsis: Guards access to AfdDisconnectListHead
|
||
|
Strategy: AfdDisconnectListHead no longer used. Nuke it!
|
||
|
|
||
|
|
||
|
LISTEN.C
|
||
|
|
||
|
Function: AfdWaitForListen
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdCancelWaitForListen
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdConnectEventHandler
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdRestartAccept
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
|
||
|
MISC.C
|
||
|
|
||
|
Function: AfdInsertNewEndpointInList
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdRemoveEndpointFromList
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdInterlockedRemoveEntryList
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdGetConnectData
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdSetConnectData
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdQueueWorkItem
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdDoWork
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
|
||
|
POLL.C
|
||
|
|
||
|
Function: AfdPoll
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdCancelPoll
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdIndicatePollEvent
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdTimeoutPoll
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
|
||
|
RECEIVE.C
|
||
|
|
||
|
Function: AfdReceive
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdRestartReceive
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdReceiveEventHandler
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdReceiveExpeditedEventHandler
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdQueryReceiveInformation
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
|
||
|
SEND.C
|
||
|
|
||
|
Function: AfdRestartBufferSend
|
||
|
Protects: Connection->VcDisconnectIrp
|
||
|
Synopsis: Used to grab the disconnect IRP off a connection.
|
||
|
Strategy: Use InterlockedExchange. Will require changes to
|
||
|
blkconn!AfdFreeConnection.
|
||
|
|
||
|
|
||
|
|
||
|
AfdBufferSpinLock Usage
|
||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
BUFFER.C
|
||
|
|
||
|
Function: AfdGetBuffer
|
||
|
Protects: Afd{Small|Medium|Large}BufferListHead
|
||
|
Synopsis: Serializes access to the various buffer lists.
|
||
|
Strategy: Use DaveC's SLIST instead. We'll still need the spinlock
|
||
|
for PPC.
|
||
|
|
||
|
Function: AfdReturnBuffer
|
||
|
Protects: Afd{Small|Medium|Large}BufferListHead
|
||
|
Synopsis: Serializes access to the various buffer lists.
|
||
|
Strategy: Use DaveC's SLIST instead. We'll still need the spinlock
|
||
|
for PPC.
|
||
|
|
||
|
|
||
|
|
||
|
Endpoint->SpinLock Usage
|
||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
ACCEPT.C
|
||
|
|
||
|
Function: AfdAcceptCore
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
|
||
|
BLKCONN.C
|
||
|
|
||
|
Function: AfdAddConnectedReference
|
||
|
Protects: Connection->ConnectedReferenceAdded
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdDeleteConnectedReference
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
|
||
|
CLOSE.C
|
||
|
|
||
|
Function: AfdCleanup
|
||
|
Protects: Endpoint->{Receive|Peek}DatagramIrpListHead,
|
||
|
Endpoint->Vc{Receive|Send}IrpListHead,
|
||
|
Connection->CleanupBegun,
|
||
|
Endpoint->TransmitIrp
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
|
||
|
CONNECT.C
|
||
|
|
||
|
Function: AfdDoDatagramConnect
|
||
|
Protects: Endpoint->Common.Datagram.RemoteAddress[Length]
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdRestartConnect
|
||
|
Protects: Connection->ConnectedReferenceAdded
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdEnabledFailedConnectEvent
|
||
|
Protects: Endpoint->EventsEnabled
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
|
||
|
DISCONN.C
|
||
|
|
||
|
Function: AfdDisconnectEventHandler
|
||
|
Protects: Connection->Vc{Receive|Send}IrpListHead,
|
||
|
Connection->VcByteCounts
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdBeginAbort
|
||
|
Protects: Connection->Vc{Receive|Send}IrpListHead,
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdRestartAbort
|
||
|
Protects: Connection->Vc{Receive|Send}IrpListHead,
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
|
||
|
EVENTSEL.C
|
||
|
|
||
|
Function: AfdEventSelect
|
||
|
Protects: Endpoint->EventSelectStuff
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
Function: AfdEnumNetworkEvents
|
||
|
Protects: Endpoint->EventSelectStuff
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
|
||
|
FASTIO.C
|
||
|
|
||
|
Function:
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
|
||
|
POLL.C
|
||
|
|
||
|
Function:
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
|
||
|
RECEIVE.C
|
||
|
|
||
|
Function:
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
|
||
|
RECVDG.C
|
||
|
|
||
|
Function:
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
|
||
|
RECVVC.C
|
||
|
|
||
|
Function:
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
|
||
|
SEND.C
|
||
|
|
||
|
Function:
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
|
||
|
TRANFILE.C
|
||
|
|
||
|
Function:
|
||
|
Protects:
|
||
|
Synopsis:
|
||
|
Strategy:
|
||
|
|
||
|
|