185,7 → 185,7 |
if not IsMultiThread then |
begin |
TLSKey := TLSAlloc(); |
InitThreadVars(@SysRelocateThreadVar); {XXX: must be @SysRelocateThreadvar} |
InitThreadVars(@SysRelocateThreadVar); |
IsMultiThread := True; |
end; |
|
287,7 → 287,52 |
end; |
|
|
{***************************************************************************** |
Heap Mutex Protection |
*****************************************************************************} |
|
{$ifndef HAS_MT_MEMORYMANAGER} |
var |
HeapMutex: TRTLCriticalSection; |
|
procedure KosHeapMutexInit; |
begin |
InitCriticalSection(HeapMutex); |
end; |
|
procedure KosHeapMutexDone; |
begin |
DoneCriticalSection(HeapMutex); |
end; |
|
procedure KosHeapMutexLock; |
begin |
EnterCriticalSection(HeapMutex); |
end; |
|
procedure KosHeapMutexUnlock; |
begin |
LeaveCriticalSection(HeapMutex); |
end; |
|
|
const |
KosMemoryMutexManager: TMemoryMutexManager = ( |
MutexInit : @KosHeapMutexInit; |
MutexDone : @KosHeapMutexDone; |
MutexLock : @KosHeapMutexLock; |
MutexUnlock: @KosHeapMutexUnlock); |
|
|
procedure InitHeapMutexes; |
begin |
SetMemoryMutexManager(KosMemoryMutexManager); |
end; |
|
{$endif HAS_MT_MEMORYMANAGER} |
|
|
var |
KosThreadManager: TThreadManager; |
|
procedure InitSystemThreads; |
336,5 → 381,8 |
SemaphorePost := @NoSemaphorePost; |
end; |
SetThreadManager(KosThreadManager); |
{$ifndef HAS_MT_MEMORYMANAGER} |
InitHeapMutexes; |
{$endif HAS_MT_MEMORYMANAGER} |
ThreadID := GetCurrentThreadID; |
end; |