fpc/rtl/wasi/sysosh.inc
Nikolay Nikolov 41ead20bfb * WebAssembly threads: fixed race condition LockMutex in the check where Locked
is 1, but Owner still holds the current thread id, even though another thread
  has just acquired a lock, but still haven't updated the owner thread ID. We
  avoid this problem by setting Owner to nil before unlocking the mutex. And in
  InitMutex/DoneMutex, we store the creator thread ID in a different field -
  Creator, instead of Owner.
2024-08-03 02:34:05 +03:00

34 lines
1.2 KiB
PHP

{
This file is part of the Free Pascal run time library.
Copyright (c) 2013 by Free Pascal development team
This file implements all the base types and limits required
for a minimal POSIX compliant subset required to port the compiler
to a new OS.
See the file COPYING.FPC, included in this distribution,
for details about the copyright.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************}
{Platform specific information}
type
THandle = LongInt;
TThreadID = Pointer;
TOSTimestamp = LongInt;
PRTLCriticalSection = ^TRTLCriticalSection;
TRTLCriticalSection = record
Locked: LongInt; // integer so we can use wait32.
Count: LongInt; // Number of times locked.
Waiters : LongInt; // Number of waiters
Kind : LongInt; // Kind of mutex, Equals Ord(TMutexKind)
Owner : TThreadID; // Owner thread (who holds the lock)
Creator : TThreadID; // Creator thread
Destroying : Boolean; // Set when notifying that we're destroying the mutex.
end;