|
@@ -26,6 +26,10 @@ const
|
|
var
|
|
var
|
|
InitialHeapBlockStart: Pointer;
|
|
InitialHeapBlockStart: Pointer;
|
|
InitialHeapBlockEnd: Pointer;
|
|
InitialHeapBlockEnd: Pointer;
|
|
|
|
+{$ifdef FPC_WASM_THREADS}
|
|
|
|
+ InitialHeapCriticalSection: TRtlCriticalSection;
|
|
|
|
+ InitialHeapCriticalSectionInitialized: Boolean = false;
|
|
|
|
+{$endif FPC_WASM_THREADS}
|
|
|
|
|
|
procedure SetInitialHeapBlockStart(p: Pointer);[Public, Alias : 'FPC_WASM_SETINITIALHEAPBLOCKSTART'];
|
|
procedure SetInitialHeapBlockStart(p: Pointer);[Public, Alias : 'FPC_WASM_SETINITIALHEAPBLOCKSTART'];
|
|
begin
|
|
begin
|
|
@@ -43,6 +47,10 @@ const
|
|
var
|
|
var
|
|
res: ptruint;
|
|
res: ptruint;
|
|
begin
|
|
begin
|
|
|
|
+{$ifdef FPC_WASM_THREADS}
|
|
|
|
+ if InitialHeapCriticalSectionInitialized then
|
|
|
|
+ EnterCriticalSection(InitialHeapCriticalSection);
|
|
|
|
+{$endif FPC_WASM_THREADS}
|
|
if (PtrUInt(InitialHeapBlockEnd)-PtrUInt(InitialHeapBlockStart))>=size then
|
|
if (PtrUInt(InitialHeapBlockEnd)-PtrUInt(InitialHeapBlockStart))>=size then
|
|
begin
|
|
begin
|
|
SysOSAlloc:=InitialHeapBlockStart;
|
|
SysOSAlloc:=InitialHeapBlockStart;
|
|
@@ -56,6 +64,10 @@ begin
|
|
else
|
|
else
|
|
SysOSAlloc:=nil;
|
|
SysOSAlloc:=nil;
|
|
end;
|
|
end;
|
|
|
|
+{$ifdef FPC_WASM_THREADS}
|
|
|
|
+ if InitialHeapCriticalSectionInitialized then
|
|
|
|
+ LeaveCriticalSection(InitialHeapCriticalSection);
|
|
|
|
+{$endif FPC_WASM_THREADS}
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure SysOSFree(p: pointer; size: ptruint);
|
|
procedure SysOSFree(p: pointer; size: ptruint);
|