mirror of
https://github.com/reactos/reactos.git
synced 2025-02-25 01:39:30 +00:00
- Nicer solution for the problem fixed in r36102
svn path=/branches/aicom-network-fixes/; revision=36141
This commit is contained in:
parent
4b72cb5e0f
commit
8e9ec3d648
1 changed files with 11 additions and 16 deletions
|
@ -57,7 +57,9 @@ static VOID SignalSocket(
|
||||||
PAFD_ACTIVE_POLL Poll OPTIONAL,
|
PAFD_ACTIVE_POLL Poll OPTIONAL,
|
||||||
PIRP _Irp OPTIONAL,
|
PIRP _Irp OPTIONAL,
|
||||||
PAFD_POLL_INFO PollReq,
|
PAFD_POLL_INFO PollReq,
|
||||||
NTSTATUS Status
|
NTSTATUS Status,
|
||||||
|
KSPIN_LOCK Lock,
|
||||||
|
KIRQL OldIrql
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT i;
|
UINT i;
|
||||||
|
@ -86,6 +88,10 @@ static VOID SignalSocket(
|
||||||
}
|
}
|
||||||
UnlockHandles( AFD_HANDLES(PollReq), PollReq->HandleCount );
|
UnlockHandles( AFD_HANDLES(PollReq), PollReq->HandleCount );
|
||||||
if( Irp->MdlAddress ) UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) );
|
if( Irp->MdlAddress ) UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) );
|
||||||
|
AFD_DbgPrint(MID_TRACE,("Completing\n"));
|
||||||
|
KeReleaseSpinLock(&Lock, OldIrql);
|
||||||
|
IoCompleteRequest( Irp, IO_NETWORK_INCREMENT );
|
||||||
|
KeAcquireSpinLock(&Lock, &OldIrql);
|
||||||
AFD_DbgPrint(MID_TRACE,("Done\n"));
|
AFD_DbgPrint(MID_TRACE,("Done\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,11 +114,9 @@ static VOID SelectTimeout( PKDPC Dpc,
|
||||||
ZeroEvents( PollReq->Handles, PollReq->HandleCount );
|
ZeroEvents( PollReq->Handles, PollReq->HandleCount );
|
||||||
|
|
||||||
KeAcquireSpinLock( &DeviceExt->Lock, &OldIrql );
|
KeAcquireSpinLock( &DeviceExt->Lock, &OldIrql );
|
||||||
SignalSocket( Poll, NULL, PollReq, STATUS_TIMEOUT );
|
SignalSocket( Poll, NULL, PollReq, STATUS_TIMEOUT, DeviceExt->Lock, OldIrql );
|
||||||
KeReleaseSpinLock( &DeviceExt->Lock, OldIrql );
|
KeReleaseSpinLock( &DeviceExt->Lock, OldIrql );
|
||||||
|
|
||||||
IoCompleteRequest( Irp, IO_NETWORK_INCREMENT );
|
|
||||||
|
|
||||||
AFD_DbgPrint(MID_TRACE,("Timeout\n"));
|
AFD_DbgPrint(MID_TRACE,("Timeout\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,10 +149,7 @@ VOID KillSelectsForFCB( PAFD_DEVICE_EXTENSION DeviceExt,
|
||||||
if( (PVOID)HandleArray[i].Handle == FileObject &&
|
if( (PVOID)HandleArray[i].Handle == FileObject &&
|
||||||
(!OnlyExclusive || (OnlyExclusive && Poll->Exclusive)) ) {
|
(!OnlyExclusive || (OnlyExclusive && Poll->Exclusive)) ) {
|
||||||
ZeroEvents( PollReq->Handles, PollReq->HandleCount );
|
ZeroEvents( PollReq->Handles, PollReq->HandleCount );
|
||||||
SignalSocket( Poll, NULL, PollReq, STATUS_SUCCESS );
|
SignalSocket( Poll, NULL, PollReq, STATUS_SUCCESS, DeviceExt->Lock, OldIrql );
|
||||||
KeReleaseSpinLock( &DeviceExt->Lock, OldIrql );
|
|
||||||
IoCompleteRequest( Irp, IO_NETWORK_INCREMENT );
|
|
||||||
KeAcquireSpinLock( &DeviceExt->Lock, &OldIrql );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -232,10 +233,7 @@ AfdSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||||
if( Signalled ) {
|
if( Signalled ) {
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
Irp->IoStatus.Status = Status;
|
Irp->IoStatus.Status = Status;
|
||||||
SignalSocket( NULL, Irp, PollReq, Status );
|
SignalSocket( NULL, Irp, PollReq, Status, DeviceExt->Lock, OldIrql );
|
||||||
KeReleaseSpinLock( &DeviceExt->Lock, OldIrql );
|
|
||||||
IoCompleteRequest( Irp, IO_NETWORK_INCREMENT );
|
|
||||||
return Status;
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
PAFD_ACTIVE_POLL Poll = NULL;
|
PAFD_ACTIVE_POLL Poll = NULL;
|
||||||
|
@ -426,10 +424,7 @@ VOID PollReeval( PAFD_DEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject ) {
|
||||||
if( UpdatePollWithFCB( Poll, FileObject ) ) {
|
if( UpdatePollWithFCB( Poll, FileObject ) ) {
|
||||||
ThePollEnt = ThePollEnt->Flink;
|
ThePollEnt = ThePollEnt->Flink;
|
||||||
AFD_DbgPrint(MID_TRACE,("Signalling socket\n"));
|
AFD_DbgPrint(MID_TRACE,("Signalling socket\n"));
|
||||||
SignalSocket( Poll, NULL, PollReq, STATUS_SUCCESS );
|
SignalSocket( Poll, NULL, PollReq, STATUS_SUCCESS, DeviceExt->Lock, OldIrql );
|
||||||
KeReleaseSpinLock( &DeviceExt->Lock, OldIrql );
|
|
||||||
IoCompleteRequest( Irp, IO_NETWORK_INCREMENT );
|
|
||||||
KeAcquireSpinLock( &DeviceExt->Lock, &OldIrql );
|
|
||||||
} else
|
} else
|
||||||
ThePollEnt = ThePollEnt->Flink;
|
ThePollEnt = ThePollEnt->Flink;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue