SmpFpWaitForResource
VOID *__stdcall SmpFpWaitForResource(
_SM_FORWARD_PROGRESS_CTX *FpContext,
_SM_FP_RESOURCE_TYPE ResourceType,
VOID *Context){
_ETHREAD *CurrentThread;
_ETHREAD *i;
VOID *result;
CurrentThread = (_ETHREAD *)Context;
if( !Context )
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
for( i = (_ETHREAD *)*((_QWORD *)FpContext + 13);
CurrentThread != i
&& (*((_QWORD *)FpContext + 13)
|| _InterlockedCompareExchange64((volatile signed __int64 *)FpContext + 13, (signed __int64)CurrentThread, 0i64));
i = (_ETHREAD *)*((_QWORD *)FpContext + 13) )
{
KeWaitForSingleObject((UINT64)(FpContext + 2), 0, 0, 0, 0i64);
}
result = SmpFpAllocateResource(FpContext, ResourceType);
if( !Context )
_InterlockedExchange64((volatile __int64 *)FpContext + 13, (__int64)result);
return result;
}Referenced by:
SmFpAllocate