[fpc-pascal] Getting the state of a TRTLCriticalSection
Mark Morgan Lloyd
markMLl.fpc-pascal at telemetry.co.uk
Sun Oct 6 11:26:01 CEST 2013
Is there a preferred way of reading back whether something (including
the current thread) has already entered a TCriticalSection?
I'm trying to put assertions in code that, partly under non-GUI thread
control via Synchronize, adds and deletes pages to a TPageControl. If I
do this
property BloodyGreatLock: boolean read GetBGL write SetBGL;
..
fBGL: TCriticalSection;
..
function GetBGL: boolean;
var gotLock: boolean;
begin
try
gotLock := fBGL.TryEnter
finally
if gotLock then
fBGL.Leave
end;
result := not gotLock
end { GetBGL } ;
then this initialisation code and test sequence
initialization
fBGL := TCriticalSection.Create;
Assert(BloodyGreatLock = false); (* Check lock read works properly *)
Assert(BloodyGreatLock = false);
BloodyGreatLock := true;
Assert(BloodyGreatLock = true); <===== FAILURE HERE
Assert(BloodyGreatLock = true);
fails where indicated since the lock is owned by the current thread so
TryEnter has succeeded.
--
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk
[Opinions above are the author's, not those of his employers or colleagues]
More information about the fpc-pascal
mailing list