mirror of
https://github.com/reactos/reactos.git
synced 2024-08-19 09:59:44 +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 {
|
_SEH_TRY {
|
||||||
|
|
||||||
*IoCompletionHandle = hIoCompletionHandle;
|
*IoCompletionHandle = hIoCompletionHandle;
|
||||||
} _SEH_HANDLE {
|
} _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) {
|
||||||
|
|
||||||
Status = _SEH_GetExceptionCode();
|
Status = _SEH_GetExceptionCode();
|
||||||
} _SEH_END;
|
} _SEH_END;
|
||||||
|
@ -332,7 +332,7 @@ NtOpenIoCompletion(OUT PHANDLE IoCompletionHandle,
|
||||||
_SEH_TRY {
|
_SEH_TRY {
|
||||||
|
|
||||||
*IoCompletionHandle = hIoCompletionHandle;
|
*IoCompletionHandle = hIoCompletionHandle;
|
||||||
} _SEH_HANDLE {
|
} _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) {
|
||||||
|
|
||||||
Status = _SEH_GetExceptionCode();
|
Status = _SEH_GetExceptionCode();
|
||||||
} _SEH_END;
|
} _SEH_END;
|
||||||
|
@ -393,7 +393,7 @@ NtQueryIoCompletion(IN HANDLE IoCompletionHandle,
|
||||||
|
|
||||||
*ResultLength = sizeof(IO_COMPLETION_BASIC_INFORMATION);
|
*ResultLength = sizeof(IO_COMPLETION_BASIC_INFORMATION);
|
||||||
}
|
}
|
||||||
} _SEH_HANDLE {
|
} _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) {
|
||||||
|
|
||||||
Status = _SEH_GetExceptionCode();
|
Status = _SEH_GetExceptionCode();
|
||||||
} _SEH_END;
|
} _SEH_END;
|
||||||
|
@ -472,8 +472,6 @@ NtRemoveIoCompletion(IN HANDLE IoCompletionHandle,
|
||||||
/* Get the Packet Data */
|
/* Get the Packet Data */
|
||||||
Packet = CONTAINING_RECORD(ListEntry, IO_COMPLETION_PACKET, ListEntry);
|
Packet = CONTAINING_RECORD(ListEntry, IO_COMPLETION_PACKET, ListEntry);
|
||||||
|
|
||||||
_SEH_TRY {
|
|
||||||
|
|
||||||
/* Check if this is piggybacked on an IRP */
|
/* Check if this is piggybacked on an IRP */
|
||||||
if (Packet->PacketType == IrpCompletionPacket)
|
if (Packet->PacketType == IrpCompletionPacket)
|
||||||
{
|
{
|
||||||
|
@ -482,24 +480,32 @@ NtRemoveIoCompletion(IN HANDLE IoCompletionHandle,
|
||||||
Irp = CONTAINING_RECORD(ListEntry, IRP, Tail.Overlay.ListEntry);
|
Irp = CONTAINING_RECORD(ListEntry, IRP, Tail.Overlay.ListEntry);
|
||||||
|
|
||||||
/* Return values to user */
|
/* Return values to user */
|
||||||
|
_SEH_TRY {
|
||||||
|
|
||||||
*CompletionKey = Irp->Tail.CompletionKey;
|
*CompletionKey = Irp->Tail.CompletionKey;
|
||||||
*CompletionContext = Irp->Overlay.AsynchronousParameters.UserApcContext;
|
*CompletionContext = Irp->Overlay.AsynchronousParameters.UserApcContext;
|
||||||
*IoStatusBlock = Packet->IoStatus;
|
*IoStatusBlock = Packet->IoStatus;
|
||||||
|
} _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) {
|
||||||
|
|
||||||
|
Status = _SEH_GetExceptionCode();
|
||||||
|
} _SEH_END;
|
||||||
|
|
||||||
IoFreeIrp(Irp);
|
IoFreeIrp(Irp);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* This is a user-mode generated or API generated mini-packet */
|
/* This is a user-mode generated or API generated mini-packet */
|
||||||
|
_SEH_TRY {
|
||||||
|
|
||||||
*CompletionKey = Packet->Key;
|
*CompletionKey = Packet->Key;
|
||||||
*CompletionContext = Packet->Context;
|
*CompletionContext = Packet->Context;
|
||||||
*IoStatusBlock = Packet->IoStatus;
|
*IoStatusBlock = Packet->IoStatus;
|
||||||
IopFreeIoCompletionPacket(Packet);
|
} _SEH_EXCEPT(_SEH_ExSystemExceptionFilter) {
|
||||||
}
|
|
||||||
|
|
||||||
} _SEH_HANDLE {
|
|
||||||
|
|
||||||
Status = _SEH_GetExceptionCode();
|
Status = _SEH_GetExceptionCode();
|
||||||
} _SEH_END;
|
} _SEH_END;
|
||||||
|
|
||||||
|
IopFreeIoCompletionPacket(Packet);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dereference the Object */
|
/* Dereference the Object */
|
||||||
|
|
Loading…
Reference in a new issue