Author: mjmartin
Date: Fri Sep 24 10:07:54 2010
New Revision: 48857
URL:
http://svn.reactos.org/svn/reactos?rev=48857&view=rev
Log:
[ntoskrnl/ps]
- PspCreateThread: If thread creation fails, dereference the Process object also to
account for the reference taken at the beginning of the function.
Modified:
trunk/reactos/ntoskrnl/ps/thread.c
Modified: trunk/reactos/ntoskrnl/ps/thread.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ps/thread.c?rev=4…
==============================================================================
--- trunk/reactos/ntoskrnl/ps/thread.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ps/thread.c [iso-8859-1] Fri Sep 24 10:07:54 2010
@@ -280,6 +280,8 @@
{
/* We couldn't create the CID, dereference the thread and fail */
ObDereferenceObject(Thread);
+ ObDereferenceObject(Process);
+ ASSERT(FALSE);
return STATUS_INSUFFICIENT_RESOURCES;
}
@@ -301,6 +303,8 @@
{
/* Fail */
ObDereferenceObject(Thread);
+ ObDereferenceObject(Process);
+ ASSERT(FALSE);
return STATUS_PROCESS_IS_TERMINATING;
}
@@ -314,6 +318,8 @@
/* Failed to create the TEB. Release rundown and dereference */
ExReleaseRundownProtection(&Process->RundownProtect);
ObDereferenceObject(Thread);
+ ObDereferenceObject(Process);
+ ASSERT(FALSE);
return Status;
}
@@ -357,6 +363,9 @@
/* Release rundown and dereference */
ExReleaseRundownProtection(&Process->RundownProtect);
ObDereferenceObject(Thread);
+ ObDereferenceObject(Process);
+ ASSERT(FALSE);
+
return Status;
}
@@ -431,6 +440,9 @@
/* Dereference completely to kill it */
ObDereferenceObjectEx(Thread, 2);
+ ObDereferenceObject(Process);
+ ASSERT(FALSE);
+
return Status;
}
@@ -513,6 +525,9 @@
/* Close its handle, killing it */
ObCloseHandle(ThreadHandle, PreviousMode);
+ ObDereferenceObject(Process);
+ ASSERT(FALSE);
+
return Status;
}