From f19aac18a2f7997583395e91800f85cd04425233 Mon Sep 17 00:00:00 2001 From: juha Date: Sun, 4 Jul 2021 11:42:45 +0000 Subject: [PATCH] SqlDb: Prevent a crash when dropping TPQTEventMonitor on a form. Issue #39134, patch by CudaText man. git-svn-id: trunk@65359 - --- components/sqldb/pqteventmonitor.pas | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/components/sqldb/pqteventmonitor.pas b/components/sqldb/pqteventmonitor.pas index 19e65c8124..83e7551812 100644 --- a/components/sqldb/pqteventmonitor.pas +++ b/components/sqldb/pqteventmonitor.pas @@ -14,6 +14,7 @@ type TPQTEventMonitor=class(TPQEventMonitor) private + FInited:Boolean; Timer:TTimer; function GetPollInterval: integer; procedure OnTimer(Sender: TObject); @@ -34,7 +35,6 @@ implementation procedure TPQTEventMonitor.SetPollInterval(AValue: integer); begin - if Timer.Interval=AValue then Exit; Timer.Interval:=AValue; end; @@ -50,8 +50,14 @@ end; constructor TPQTEventMonitor.Create(AOwner: TComponent); begin - inherited Create(AOwner); - Timer:=TTImer.Create(self); + try + inherited Create(AOwner); + FInited:=true; + except + //FPC code raises EInOutError in Create() if Postgres lib was not loaded + FInited:=false; + end; + Timer:=TTimer.Create(self); Timer.Interval:=500; Timer.Enabled:=false; Timer.OnTimer:=@OnTimer; @@ -59,17 +65,20 @@ end; destructor TPQTEventMonitor.Destroy; begin + if not FInited then exit; inherited Destroy; end; procedure TPQTEventMonitor.RegisterEvents; begin + if not FInited then exit; inherited RegisterEvents; Timer.Enabled:=true; end; procedure TPQTEventMonitor.UnRegisterEvents; begin + if not FInited then exit; Timer.Enabled:=false; inherited UnRegisterEvents; end;