mirror of
https://github.com/reactos/reactos.git
synced 2026-05-29 21:19:51 +08:00
[NTOS:EX] Use InterlockedExchangeAdd64 instead of InterlockedCompareExchange64 loop in ExAllocateLocallyUniqueId
This commit is contained in:
@@ -339,27 +339,9 @@ VOID
|
||||
NTAPI
|
||||
ExAllocateLocallyUniqueId(OUT LUID *LocallyUniqueId)
|
||||
{
|
||||
LARGE_INTEGER PrevLuid;
|
||||
LONGLONG NewLuid, CompLuid;
|
||||
|
||||
/* Atomically increment the luid */
|
||||
PrevLuid.QuadPart = ExpLuid.QuadPart;
|
||||
for (NewLuid = ExpLuid.QuadPart + ExpLuidIncrement; ;
|
||||
NewLuid = PrevLuid.QuadPart + ExpLuidIncrement)
|
||||
{
|
||||
CompLuid = InterlockedCompareExchange64(&ExpLuid.QuadPart,
|
||||
NewLuid,
|
||||
PrevLuid.QuadPart);
|
||||
if (CompLuid == PrevLuid.QuadPart)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
PrevLuid.QuadPart = CompLuid;
|
||||
}
|
||||
|
||||
LocallyUniqueId->LowPart = PrevLuid.LowPart;
|
||||
LocallyUniqueId->HighPart = PrevLuid.HighPart;
|
||||
*(LONG64*)LocallyUniqueId = InterlockedExchangeAdd64(&ExpLuid.QuadPart,
|
||||
ExpLuidIncrement);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user