You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
440 lines
12 KiB
440 lines
12 KiB
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:
|
|
|
|
|