--- ibx/trunk/fbintf/client/FBActivityMonitor.pas 2017/02/24 17:05:03 55 +++ ibx/trunk/fbintf/client/FBActivityMonitor.pas 2017/03/06 10:20:02 56 @@ -25,9 +25,12 @@ * *) unit FBActivityMonitor; +{$IFDEF MSWINDOWS} +{$DEFINE WINDOWS} +{$ENDIF} {$IFDEF FPC} -{$mode objfpc}{$H+} +{$mode delphi} {$interfaces COM} {$ENDIF} @@ -47,8 +50,6 @@ type {$IFDEF DEBUGINTERFACES} TMonitoredObject = class(TInterfacedObject) - private - FObjectCount: integer; static; public constructor Create; destructor Destroy; override; @@ -152,6 +153,9 @@ end; { TMonitoredObject } {$IFDEF DEBUGINTERFACES} +var + FObjectCount: integer; + constructor TMonitoredObject.Create; begin inherited Create; @@ -336,7 +340,16 @@ procedure TInterfaceOwner.ReleaseInterfa var i: integer; begin for i := 0 to Length(FInterfaces) - 1 do + begin + {$IFNDEF FPC} + {With Delphi we need to explicitly null the object reference when it is + going to be disposed of. This is because Delphi does not drop the reference + count until after the containing object is released.} + if (FInterfaces[i] <> nil) and (FInterfaces[i].RefCount <= 2) then + FInterfaces[i] := nil; + {$ENDIF} FInterfaceRefs[i] := nil; + end; end; end.