mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 14:09:20 +02:00
+ added register keyword to Interlocked* definitions as suggested by Jonas, resolves #12255
git-svn-id: trunk@12698 -
This commit is contained in:
parent
c4310a6f08
commit
0c65d53f45
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -8719,6 +8719,7 @@ tests/webtbs/tw12233.pp svneol=native#text/plain
|
|||||||
tests/webtbs/tw12237.pp svneol=native#text/plain
|
tests/webtbs/tw12237.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw12242.pp svneol=native#text/plain
|
tests/webtbs/tw12242.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw12249.pp svneol=native#text/plain
|
tests/webtbs/tw12249.pp svneol=native#text/plain
|
||||||
|
tests/webtbs/tw12255.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw1228.pp svneol=native#text/plain
|
tests/webtbs/tw1228.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw1229.pp svneol=native#text/plain
|
tests/webtbs/tw1229.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw12318.pp svneol=native#text/plain
|
tests/webtbs/tw12318.pp svneol=native#text/plain
|
||||||
|
@ -1011,11 +1011,11 @@ function OpenWaitableTimer(dwDesiredAccess:DWORD;bInheritHandle:BOOL;lpTimerName
|
|||||||
// windows because of Delphi compat.
|
// windows because of Delphi compat.
|
||||||
|
|
||||||
{$calling default}
|
{$calling default}
|
||||||
function InterLockedIncrement (var Target: longint) : longint; external name 'FPC_INTERLOCKEDINCREMENT';
|
function InterLockedIncrement (var Target: longint) : longint; register; external name 'FPC_INTERLOCKEDINCREMENT';
|
||||||
function InterLockedDecrement (var Target: longint) : longint; external name 'FPC_INTERLOCKEDDECREMENT';
|
function InterLockedDecrement (var Target: longint) : longint; register; external name 'FPC_INTERLOCKEDDECREMENT';
|
||||||
function InterLockedExchange (var Target: longint;Source : longint) : longint; external name 'FPC_INTERLOCKEDEXCHANGE';
|
function InterLockedExchange (var Target: longint;Source : longint) : longint; register; external name 'FPC_INTERLOCKEDEXCHANGE';
|
||||||
function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint; external name 'FPC_INTERLOCKEDEXCHANGEADD';
|
function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint; register; external name 'FPC_INTERLOCKEDEXCHANGEADD';
|
||||||
function InterlockedCompareExchange(var Target: longint; NewValue: longint; Comperand: longint): longint; external name 'FPC_INTERLOCKEDCOMPAREEXCHANGE';
|
function InterlockedCompareExchange(var Target: longint; NewValue: longint; Comperand: longint): longint; register; external name 'FPC_INTERLOCKEDCOMPAREEXCHANGE';
|
||||||
{$calling stdcall}
|
{$calling stdcall}
|
||||||
|
|
||||||
{$endif read_interface}
|
{$endif read_interface}
|
||||||
|
21
tests/webtbs/tw12255.pp
Normal file
21
tests/webtbs/tw12255.pp
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{ %target=win32 }
|
||||||
|
{$mode objfpc}
|
||||||
|
uses sysutils
|
||||||
|
, windows
|
||||||
|
;
|
||||||
|
var
|
||||||
|
SharedInt : PInteger;
|
||||||
|
target : integer;
|
||||||
|
savetarget : integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
target := 0;
|
||||||
|
savetarget := system.InterlockedCompareExchange(Target, 1, 0);
|
||||||
|
Writeln(format('%d = InterlockedCompareExchange(Target= %d , 1, 0)',[savetarget, target]));
|
||||||
|
SharedInt := AllocMem(SizeOf(Integer));
|
||||||
|
SharedInt^ := 0;
|
||||||
|
// here is runtime exception rised - access to invalid memory
|
||||||
|
savetarget := windows.InterlockedCompareExchange(SharedInt^, 1, 0);
|
||||||
|
Writeln(format('%d = InterlockedCompareExchange(SharedInt^= %d , 1, 0)',[savetarget, SharedInt^]));
|
||||||
|
FreeMem(SharedInt);
|
||||||
|
end.
|
Loading…
Reference in New Issue
Block a user