From e9856d25ed40fd573a60e0243e1a4e0533daa1ad Mon Sep 17 00:00:00 2001 From: Bergmann89 Date: Wed, 6 May 2015 20:09:43 +0200 Subject: [PATCH] * [uutlMessages] removed autofree of sync messages because of deadlock --- uutlMessages.pas | 38 ++++---------------------------------- 1 file changed, 4 insertions(+), 34 deletions(-) diff --git a/uutlMessages.pas b/uutlMessages.pas index b46b261..3f5ab93 100644 --- a/uutlMessages.pas +++ b/uutlMessages.pas @@ -46,13 +46,10 @@ type TutlSynchronousMessage = class(TutlMessage) private fEvent: TEvent; - fFreeOnFinish: Boolean; - fLock: Integer; - procedure Lock; - procedure Unlock; public procedure Finish; function WaitFor(const aTimeout: Cardinal): TWaitResult; + constructor Create(const aID: Cardinal; const aWParam, aLParam: PtrInt); overload; constructor Create(const {%H-}aID: Cardinal; const aArgs: TObject; const aOwnsObjects: Boolean = true); overload; destructor Destroy; override; @@ -108,57 +105,30 @@ end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //TutlSynchronousMessage////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -procedure TutlSynchronousMessage.Lock; -begin - repeat until (InterLockedExchange(fLock, 1) = 0); -end; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -procedure TutlSynchronousMessage.Unlock; -begin - InterLockedExchange(fLock, 0); -end; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TutlSynchronousMessage.Finish; begin fEvent.SetEvent; - Lock; - if fFreeOnFinish then - Free - else - Unlock; end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function TutlSynchronousMessage.WaitFor(const aTimeout: Cardinal): TWaitResult; begin - Lock; - try - result := fEvent.WaitFor(aTimeout); - fFreeOnFinish := (result <> wrSignaled); - finally - Unlock; - end; + result := fEvent.WaitFor(aTimeout); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// constructor TutlSynchronousMessage.Create(const aID: Cardinal; const aWParam, aLParam: PtrInt); begin inherited Create(aID, aWParam, aLParam); - fEvent := TEvent.Create(nil, true, false, ''); - fFreeOnFinish := false; - fLock := 0; + fEvent := TEvent.Create(nil, true, false, ''); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// constructor TutlSynchronousMessage.Create(const aID: Cardinal; const aArgs: TObject; const aOwnsObjects: Boolean); begin inherited Create(ID, aArgs, aOwnsObjects); - fEvent := TEvent.Create(nil, true, false, ''); - fFreeOnFinish := false; - fLock := 0; + fEvent := TEvent.Create(nil, true, false, ''); end; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////