mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-03 18:18:37 +02:00
* MemoryManager record has a field NeedLock if the wrapper functions
need to provide locking for multithreaded programs
This commit is contained in:
parent
766e8d35f6
commit
ca3679e4bf
@ -63,6 +63,7 @@ procedure SysHeapMutexUnlock;forward;
|
|||||||
{ Memory manager }
|
{ Memory manager }
|
||||||
const
|
const
|
||||||
MemoryManager: TMemoryManager = (
|
MemoryManager: TMemoryManager = (
|
||||||
|
NeedLock: true;
|
||||||
GetMem: @SysGetMem;
|
GetMem: @SysGetMem;
|
||||||
FreeMem: @SysFreeMem;
|
FreeMem: @SysFreeMem;
|
||||||
FreeMemSize: @SysFreeMemSize;
|
FreeMemSize: @SysFreeMemSize;
|
||||||
@ -133,7 +134,7 @@ end;
|
|||||||
|
|
||||||
procedure GetMemoryManager(var MemMgr:TMemoryManager);
|
procedure GetMemoryManager(var MemMgr:TMemoryManager);
|
||||||
begin
|
begin
|
||||||
if IsMultiThread then
|
if IsMultiThread and MemoryManager.NeedLock then
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
MemoryMutexManager.MutexLock;
|
MemoryMutexManager.MutexLock;
|
||||||
@ -151,7 +152,7 @@ end;
|
|||||||
|
|
||||||
procedure SetMemoryManager(const MemMgr:TMemoryManager);
|
procedure SetMemoryManager(const MemMgr:TMemoryManager);
|
||||||
begin
|
begin
|
||||||
if IsMultiThread then
|
if IsMultiThread and MemoryManager.NeedLock then
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
MemoryMutexManager.MutexLock;
|
MemoryMutexManager.MutexLock;
|
||||||
@ -169,7 +170,7 @@ end;
|
|||||||
|
|
||||||
function IsMemoryManagerSet:Boolean;
|
function IsMemoryManagerSet:Boolean;
|
||||||
begin
|
begin
|
||||||
if IsMultiThread then
|
if IsMultiThread and MemoryManager.NeedLock then
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
MemoryMutexManager.MutexLock;
|
MemoryMutexManager.MutexLock;
|
||||||
@ -189,7 +190,7 @@ end;
|
|||||||
|
|
||||||
procedure GetMem(Var p:pointer;Size:Longint);
|
procedure GetMem(Var p:pointer;Size:Longint);
|
||||||
begin
|
begin
|
||||||
if IsMultiThread then
|
if IsMultiThread and MemoryManager.NeedLock then
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
MemoryMutexManager.MutexLock;
|
MemoryMutexManager.MutexLock;
|
||||||
@ -207,7 +208,7 @@ end;
|
|||||||
|
|
||||||
procedure FreeMem(p:pointer;Size:Longint);
|
procedure FreeMem(p:pointer;Size:Longint);
|
||||||
begin
|
begin
|
||||||
if IsMultiThread then
|
if IsMultiThread and MemoryManager.NeedLock then
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
MemoryMutexManager.MutexLock;
|
MemoryMutexManager.MutexLock;
|
||||||
@ -225,7 +226,7 @@ end;
|
|||||||
|
|
||||||
function MaxAvail:Longint;
|
function MaxAvail:Longint;
|
||||||
begin
|
begin
|
||||||
if IsMultiThread then
|
if IsMultiThread and MemoryManager.NeedLock then
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
MemoryMutexManager.MutexLock;
|
MemoryMutexManager.MutexLock;
|
||||||
@ -243,7 +244,7 @@ end;
|
|||||||
|
|
||||||
function MemAvail:Longint;
|
function MemAvail:Longint;
|
||||||
begin
|
begin
|
||||||
if IsMultiThread then
|
if IsMultiThread and MemoryManager.NeedLock then
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
MemoryMutexManager.MutexLock;
|
MemoryMutexManager.MutexLock;
|
||||||
@ -262,7 +263,7 @@ end;
|
|||||||
{ FPC Additions }
|
{ FPC Additions }
|
||||||
function HeapSize:Longint;
|
function HeapSize:Longint;
|
||||||
begin
|
begin
|
||||||
if IsMultiThread then
|
if IsMultiThread and MemoryManager.NeedLock then
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
MemoryMutexManager.MutexLock;
|
MemoryMutexManager.MutexLock;
|
||||||
@ -280,7 +281,7 @@ end;
|
|||||||
|
|
||||||
function MemSize(p:pointer):Longint;
|
function MemSize(p:pointer):Longint;
|
||||||
begin
|
begin
|
||||||
if IsMultiThread then
|
if IsMultiThread and MemoryManager.NeedLock then
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
MemoryMutexManager.MutexLock;
|
MemoryMutexManager.MutexLock;
|
||||||
@ -299,7 +300,7 @@ end;
|
|||||||
{ Delphi style }
|
{ Delphi style }
|
||||||
function FreeMem(p:pointer):Longint;
|
function FreeMem(p:pointer):Longint;
|
||||||
begin
|
begin
|
||||||
if IsMultiThread then
|
if IsMultiThread and MemoryManager.NeedLock then
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
MemoryMutexManager.MutexLock;
|
MemoryMutexManager.MutexLock;
|
||||||
@ -317,7 +318,7 @@ end;
|
|||||||
|
|
||||||
function GetMem(size:longint):pointer;
|
function GetMem(size:longint):pointer;
|
||||||
begin
|
begin
|
||||||
if IsMultiThread then
|
if IsMultiThread and MemoryManager.NeedLock then
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
MemoryMutexManager.MutexLock;
|
MemoryMutexManager.MutexLock;
|
||||||
@ -335,7 +336,7 @@ end;
|
|||||||
|
|
||||||
function AllocMem(Size:Longint):pointer;
|
function AllocMem(Size:Longint):pointer;
|
||||||
begin
|
begin
|
||||||
if IsMultiThread then
|
if IsMultiThread and MemoryManager.NeedLock then
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
MemoryMutexManager.MutexLock;
|
MemoryMutexManager.MutexLock;
|
||||||
@ -353,7 +354,7 @@ end;
|
|||||||
|
|
||||||
function ReAllocMem(var p:pointer;Size:Longint):pointer;
|
function ReAllocMem(var p:pointer;Size:Longint):pointer;
|
||||||
begin
|
begin
|
||||||
if IsMultiThread then
|
if IsMultiThread and MemoryManager.NeedLock then
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
MemoryMutexManager.MutexLock;
|
MemoryMutexManager.MutexLock;
|
||||||
@ -374,7 +375,7 @@ end;
|
|||||||
{ Needed for calls from Assembler }
|
{ Needed for calls from Assembler }
|
||||||
function fpc_getmem(size:longint):pointer;compilerproc;[public,alias:'FPC_GETMEM'];
|
function fpc_getmem(size:longint):pointer;compilerproc;[public,alias:'FPC_GETMEM'];
|
||||||
begin
|
begin
|
||||||
if IsMultiThread then
|
if IsMultiThread and MemoryManager.NeedLock then
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
MemoryMutexManager.MutexLock;
|
MemoryMutexManager.MutexLock;
|
||||||
@ -403,7 +404,7 @@ end;
|
|||||||
|
|
||||||
procedure fpc_freemem(p:pointer);compilerproc;[public,alias:'FPC_FREEMEM'];
|
procedure fpc_freemem(p:pointer);compilerproc;[public,alias:'FPC_FREEMEM'];
|
||||||
begin
|
begin
|
||||||
if IsMultiThread then
|
if IsMultiThread and MemoryManager.NeedLock then
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
MemoryMutexManager.MutexLock;
|
MemoryMutexManager.MutexLock;
|
||||||
@ -1264,7 +1265,11 @@ end;
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.17 2002-10-30 19:54:19 peter
|
Revision 1.18 2002-10-30 20:39:13 peter
|
||||||
|
* MemoryManager record has a field NeedLock if the wrapper functions
|
||||||
|
need to provide locking for multithreaded programs
|
||||||
|
|
||||||
|
Revision 1.17 2002/10/30 19:54:19 peter
|
||||||
* remove wrong lock from SysMemSize, MemSize() does the locking
|
* remove wrong lock from SysMemSize, MemSize() does the locking
|
||||||
already.
|
already.
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
type
|
type
|
||||||
PMemoryManager = ^TMemoryManager;
|
PMemoryManager = ^TMemoryManager;
|
||||||
TMemoryManager = record
|
TMemoryManager = record
|
||||||
|
NeedLock : boolean;
|
||||||
Getmem : Function(Size:Longint):Pointer;
|
Getmem : Function(Size:Longint):Pointer;
|
||||||
Freemem : Function(p:pointer):Longint;
|
Freemem : Function(p:pointer):Longint;
|
||||||
FreememSize : Function(p:pointer;Size:Longint):Longint;
|
FreememSize : Function(p:pointer;Size:Longint):Longint;
|
||||||
@ -89,7 +90,11 @@ Procedure AsmFreemem(var p:pointer);
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.5 2002-10-14 19:39:17 peter
|
Revision 1.6 2002-10-30 20:39:13 peter
|
||||||
|
* MemoryManager record has a field NeedLock if the wrapper functions
|
||||||
|
need to provide locking for multithreaded programs
|
||||||
|
|
||||||
|
Revision 1.5 2002/10/14 19:39:17 peter
|
||||||
* threads unit added for thread support
|
* threads unit added for thread support
|
||||||
|
|
||||||
Revision 1.4 2002/09/07 15:07:45 peter
|
Revision 1.4 2002/09/07 15:07:45 peter
|
||||||
|
@ -984,6 +984,7 @@ end;
|
|||||||
|
|
||||||
const
|
const
|
||||||
TraceManager:TMemoryManager=(
|
TraceManager:TMemoryManager=(
|
||||||
|
NeedLock : true;
|
||||||
Getmem : @TraceGetMem;
|
Getmem : @TraceGetMem;
|
||||||
Freemem : @TraceFreeMem;
|
Freemem : @TraceFreeMem;
|
||||||
FreememSize : @TraceFreeMemSize;
|
FreememSize : @TraceFreeMemSize;
|
||||||
@ -1149,7 +1150,11 @@ finalization
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.19 2002-10-05 15:19:46 carl
|
Revision 1.20 2002-10-30 20:39:13 peter
|
||||||
|
* MemoryManager record has a field NeedLock if the wrapper functions
|
||||||
|
need to provide locking for multithreaded programs
|
||||||
|
|
||||||
|
Revision 1.19 2002/10/05 15:19:46 carl
|
||||||
* bugfix of assigning to external filename output
|
* bugfix of assigning to external filename output
|
||||||
|
|
||||||
Revision 1.18 2002/09/09 15:45:49 jonas
|
Revision 1.18 2002/09/09 15:45:49 jonas
|
||||||
|
Loading…
Reference in New Issue
Block a user