Use the right set (the referenced file objects) to compare when killing exclusive select objects. This fixes the select leakage observed when running Xircon. Modified: trunk/reactos/drivers/net/afd/afd/select.c _____
Modified: trunk/reactos/drivers/net/afd/afd/select.c --- trunk/reactos/drivers/net/afd/afd/select.c 2005-04-11 08:07:41 UTC (rev 14585) +++ trunk/reactos/drivers/net/afd/afd/select.c 2005-04-11 08:41:58 UTC (rev 14586) @@ -120,6 +120,7 @@
PAFD_ACTIVE_POLL Poll; PIRP Irp; PAFD_POLL_INFO PollReq; + PAFD_HANDLE HandleArray; int i;
AFD_DbgPrint(MID_TRACE,("Killing selects that refer to %x\n", FileObject)); @@ -132,11 +133,12 @@ ListEntry = ListEntry->Flink; Irp = Poll->Irp; PollReq = Irp->AssociatedIrp.SystemBuffer; - + HandleArray = AFD_HANDLES(PollReq); + for( i = 0; i < PollReq->HandleCount; i++ ) { AFD_DbgPrint(MAX_TRACE,("Req: %x, This %x\n", - PollReq->Handles[i].Handle, FileObject)); - if( (PVOID)PollReq->Handles[i].Handle == FileObject && + HandleArray[i].Handle, FileObject)); + if( (PVOID)HandleArray[i].Handle == FileObject && (!OnlyExclusive || (OnlyExclusive && Poll->Exclusive)) ) { ZeroEvents( PollReq->Handles, PollReq->HandleCount ); SignalSocket( Poll, PollReq, STATUS_SUCCESS );