Jelajahi Sumber

* Fix bug ID #32353, reset ref count fields in destructor

git-svn-id: trunk@37112 -
michael 8 tahun lalu
induk
melakukan
3787d52dee
2 mengubah file dengan 12 tambahan dan 0 penghapusan
  1. 9 0
      rtl/inc/objpas.inc
  2. 3 0
      rtl/inc/objpash.inc

+ 9 - 0
rtl/inc/objpas.inc

@@ -1050,6 +1050,15 @@
            end;
       end;
 
+   destructor TInterfacedObject.destroy;
+
+   begin
+     // We must explicitly reset. Bug ID 32353
+     FRefCount:=0;
+     FDestroyCount:=0;
+     inherited destroy;
+   end;
+
     procedure TInterfacedObject.AfterConstruction;
 
       begin

+ 3 - 0
rtl/inc/objpash.inc

@@ -294,6 +294,8 @@
             VarResult,ExcepInfo,ArgErr : pointer) : HResult;stdcall;
        end;
 
+       { TInterfacedObject }
+
        TInterfacedObject = class(TObject,IUnknown)
        protected
           frefcount : longint;
@@ -303,6 +305,7 @@
           function _AddRef : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
           function _Release : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
         public
+          destructor destroy; override;
           procedure AfterConstruction;override;
           procedure BeforeDestruction;override;
           class function NewInstance : TObject;override;