mirror of
https://github.com/reactos/reactos.git
synced 2024-07-15 08:56:08 +00:00
Bugfix from w3seek : bug 1614 Fix resource leak in NtRemoveIoCompletion
svn path=/trunk/; revision=22506
This commit is contained in:
parent
8579c127f7
commit
1e42e69d3d
|
@ -279,7 +279,7 @@ NtCreateIoCompletion(OUT PHANDLE IoCompletionHandle,
|
|||
_SEH_TRY {
|
||||
|
||||
*IoCompletionHandle = hIoCompletionHandle;
|
||||
} _SEH_HANDLE {
|
||||
} _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) {
|
||||
|
||||
Status = _SEH_GetExceptionCode();
|
||||
} _SEH_END;
|
||||
|
@ -332,7 +332,7 @@ NtOpenIoCompletion(OUT PHANDLE IoCompletionHandle,
|
|||
_SEH_TRY {
|
||||
|
||||
*IoCompletionHandle = hIoCompletionHandle;
|
||||
} _SEH_HANDLE {
|
||||
} _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) {
|
||||
|
||||
Status = _SEH_GetExceptionCode();
|
||||
} _SEH_END;
|
||||
|
@ -393,7 +393,7 @@ NtQueryIoCompletion(IN HANDLE IoCompletionHandle,
|
|||
|
||||
*ResultLength = sizeof(IO_COMPLETION_BASIC_INFORMATION);
|
||||
}
|
||||
} _SEH_HANDLE {
|
||||
} _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) {
|
||||
|
||||
Status = _SEH_GetExceptionCode();
|
||||
} _SEH_END;
|
||||
|
@ -472,8 +472,6 @@ NtRemoveIoCompletion(IN HANDLE IoCompletionHandle,
|
|||
/* Get the Packet Data */
|
||||
Packet = CONTAINING_RECORD(ListEntry, IO_COMPLETION_PACKET, ListEntry);
|
||||
|
||||
_SEH_TRY {
|
||||
|
||||
/* Check if this is piggybacked on an IRP */
|
||||
if (Packet->PacketType == IrpCompletionPacket)
|
||||
{
|
||||
|
@ -482,24 +480,32 @@ NtRemoveIoCompletion(IN HANDLE IoCompletionHandle,
|
|||
Irp = CONTAINING_RECORD(ListEntry, IRP, Tail.Overlay.ListEntry);
|
||||
|
||||
/* Return values to user */
|
||||
_SEH_TRY {
|
||||
|
||||
*CompletionKey = Irp->Tail.CompletionKey;
|
||||
*CompletionContext = Irp->Overlay.AsynchronousParameters.UserApcContext;
|
||||
*IoStatusBlock = Packet->IoStatus;
|
||||
} _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) {
|
||||
|
||||
Status = _SEH_GetExceptionCode();
|
||||
} _SEH_END;
|
||||
|
||||
IoFreeIrp(Irp);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* This is a user-mode generated or API generated mini-packet */
|
||||
_SEH_TRY {
|
||||
|
||||
*CompletionKey = Packet->Key;
|
||||
*CompletionContext = Packet->Context;
|
||||
*IoStatusBlock = Packet->IoStatus;
|
||||
IopFreeIoCompletionPacket(Packet);
|
||||
}
|
||||
|
||||
} _SEH_HANDLE {
|
||||
|
||||
} _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) {
|
||||
Status = _SEH_GetExceptionCode();
|
||||
} _SEH_END;
|
||||
|
||||
IopFreeIoCompletionPacket(Packet);
|
||||
}
|
||||
}
|
||||
|
||||
/* Dereference the Object */
|
||||
|
|
Loading…
Reference in a new issue