[KERNEL32]

Bug #43: ConvertFiberToThread should return ERROR_ALREADY_THREAD, not ERROR_INVALID_PARAMETER in case of failure.
Bug #44: ConvertFiberToThread should set FiberData to NULL in the TEB, after doing the conversion.
Thanks, Winetests, for saying "0 failures", when this API was broken.

svn path=/trunk/; revision=52803
This commit is contained in:
Alex Ionescu 2011-07-23 11:46:57 +00:00
parent e6a3064cd7
commit 01a08c5e47

View file

@ -59,24 +59,27 @@ BOOL
WINAPI
ConvertFiberToThread(VOID)
{
PTEB pTeb = NtCurrentTeb();
PTEB Teb;
PFIBER FiberData;
DPRINT1("Converting Fiber to Thread\n");
/* the current thread isn't running a fiber: failure */
if (!pTeb->HasFiberData)
/* Check if the thread is already not a fiber */
Teb = NtCurrentTeb();
if (!Teb->HasFiberData)
{
SetLastError(ERROR_INVALID_PARAMETER);
/* Fail */
SetLastError(ERROR_ALREADY_THREAD);
return FALSE;
}
/* this thread won't run a fiber anymore */
pTeb->HasFiberData = FALSE;
Teb->HasFiberData = FALSE;
FiberData = Teb->NtTib.FiberData;
Teb->NtTib.FiberData = NULL;
/* free the fiber */
if(pTeb->NtTib.FiberData != NULL)
{
RtlFreeHeap(GetProcessHeap(), 0, pTeb->NtTib.FiberData);
}
/* Free the fiber */
ASSERT(FiberData != NULL);
RtlFreeHeap(GetProcessHeap(), 0, FiberData);
/* success */
return TRUE;