From 0c07db39047092fda73e7c5b92fb76ffc4581e49 Mon Sep 17 00:00:00 2001 From: florian Date: Sun, 26 Nov 2017 09:42:04 +0000 Subject: [PATCH] * made libcups initialization/finalization more threadsafe git-svn-id: trunk@37620 - --- packages/libcups/src/cupsdyn.pp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/libcups/src/cupsdyn.pp b/packages/libcups/src/cupsdyn.pp index 68bd0dcda3..7786d711d6 100644 --- a/packages/libcups/src/cupsdyn.pp +++ b/packages/libcups/src/cupsdyn.pp @@ -1179,9 +1179,8 @@ var RefCount : integer; procedure InitializeCups; var i : integer; begin - inc(RefCount); //debugln('InitializeCups RefCount=',dbgs(RefCount)); - if RefCount = 1 then + if InterLockedIncrement(RefCount)=1 then begin for i:=0 to MaxcupsLibs do begin @@ -1193,7 +1192,7 @@ begin if CupsLibHandle = nilhandle then begin //debugln('InitializeCups load cups lib failed'); - RefCount := 0; + InterLockedDecrement(RefCount); raise EInOutError.Create('Can not load cups library'); end; end; @@ -1361,13 +1360,11 @@ end; procedure FinalizeCups; begin //debugln('* FinalizeCups'); - if RefCount>0 then - Dec(RefCount); - - if RefCount=0 then + + if InterLockedDecrement(RefCount)=0 then begin if (CupsLibHandle<>NilHandle) and not UnloadLibrary(CupsLibHandle) then - Inc(RefCount) + InterLockedIncrement(RefCount) else CupsLibHandle := NilHandle; end;