Check returned status codes.

svn path=/trunk/; revision=7823
This commit is contained in:
Eric Kohl 2004-01-22 13:18:10 +00:00
parent 9f32fb18b9
commit d55c5fe5b8

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
/* $Id: suspend.c,v 1.13 2003/10/12 17:05:50 hbirr Exp $ /* $Id: suspend.c,v 1.14 2004/01/22 13:18:10 ekohl Exp $
* *
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
* FILE: ntoskrnl/ps/suspend.c * FILE: ntoskrnl/ps/suspend.c
@ -79,24 +79,33 @@ PiSuspendThreadNormalRoutine(PVOID NormalContext,
NTSTATUS NTSTATUS
PsResumeThread(PETHREAD Thread, PULONG SuspendCount) PsResumeThread (PETHREAD Thread,
PULONG SuspendCount)
{ {
ExAcquireFastMutex(&SuspendMutex); DPRINT("PsResumeThread (Thread %p SuspendCount %p) called\n");
ExAcquireFastMutex (&SuspendMutex);
if (SuspendCount != NULL) if (SuspendCount != NULL)
{ {
*SuspendCount = Thread->Tcb.SuspendCount; *SuspendCount = Thread->Tcb.SuspendCount;
} }
if (Thread->Tcb.SuspendCount > 0) if (Thread->Tcb.SuspendCount > 0)
{ {
Thread->Tcb.SuspendCount--; Thread->Tcb.SuspendCount--;
if (Thread->Tcb.SuspendCount == 0) if (Thread->Tcb.SuspendCount == 0)
{ {
KeReleaseSemaphore(&Thread->Tcb.SuspendSemaphore, IO_NO_INCREMENT, KeReleaseSemaphore (&Thread->Tcb.SuspendSemaphore,
1, FALSE); IO_NO_INCREMENT,
} 1,
FALSE);
}
} }
ExReleaseFastMutex(&SuspendMutex);
return(STATUS_SUCCESS); ExReleaseFastMutex (&SuspendMutex);
return STATUS_SUCCESS;
} }
@ -147,26 +156,32 @@ NtResumeThread(IN HANDLE ThreadHandle,
DPRINT("NtResumeThead(ThreadHandle %lx SuspendCount %p)\n", DPRINT("NtResumeThead(ThreadHandle %lx SuspendCount %p)\n",
ThreadHandle, SuspendCount); ThreadHandle, SuspendCount);
Status = ObReferenceObjectByHandle(ThreadHandle, Status = ObReferenceObjectByHandle (ThreadHandle,
THREAD_SUSPEND_RESUME, THREAD_SUSPEND_RESUME,
PsThreadType, PsThreadType,
UserMode, UserMode,
(PVOID*)&Thread, (PVOID*)&Thread,
NULL); NULL);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
return(Status); return Status;
}
Status = PsResumeThread (Thread, &Count);
if (!NT_SUCCESS(Status))
{
ObDereferenceObject ((PVOID)Thread);
return Status;
} }
Status = PsResumeThread(Thread, &Count);
if (SuspendCount != NULL) if (SuspendCount != NULL)
{ {
*SuspendCount = Count; *SuspendCount = Count;
} }
ObDereferenceObject((PVOID)Thread); ObDereferenceObject ((PVOID)Thread);
return(STATUS_SUCCESS); return STATUS_SUCCESS;
} }
@ -203,14 +218,20 @@ NtSuspendThread(IN HANDLE ThreadHandle,
} }
Status = PsSuspendThread(Thread, &Count); Status = PsSuspendThread(Thread, &Count);
if (!NT_SUCCESS(Status))
{
ObDereferenceObject ((PVOID)Thread);
return Status;
}
if (PreviousSuspendCount != NULL) if (PreviousSuspendCount != NULL)
{ {
*PreviousSuspendCount = Count; *PreviousSuspendCount = Count;
} }
ObDereferenceObject((PVOID)Thread); ObDereferenceObject ((PVOID)Thread);
return(STATUS_SUCCESS); return STATUS_SUCCESS;
} }
VOID INIT_FUNCTION VOID INIT_FUNCTION