Quellcode durchsuchen

* always decrease the refcount of the function result of helpers that return
interfaces (since that may not have been done yet in case of an optimized
assignment before r21955, and will never be done as of r21955)

git-svn-id: trunk@21962 -

Jonas Maebe vor 13 Jahren
Ursprung
Commit
93c345a099
1 geänderte Dateien mit 9 neuen und 1 gelöschten Zeilen
  1. 9 1
      rtl/inc/objpas.inc

+ 9 - 1
rtl/inc/objpas.inc

@@ -178,7 +178,11 @@
         tmpi2:=nil;
         if Assigned(S) and ((TObject(S).GetInterfaceWeak(IUnknown,tmpi2) and (IUnknown(tmpi2).QueryInterface(IID,tmpi)=S_OK)) or
             TObject(S).GetInterface(IID,tmpi)) then
-          pointer(fpc_class_cast_intf):=tmpi
+          begin
+            // decrease reference count
+            fpc_class_cast_intf:=nil;
+            pointer(fpc_class_cast_intf):=tmpi
+          end
         else
           fpc_class_cast_intf:=nil;
       end;
@@ -204,6 +208,8 @@
              tmpi:=nil;
              if IUnknown(S).QueryInterface(iid,tmpi)<>S_OK then
                handleerror(219);
+             // decrease reference count
+             fpc_intf_as:=nil;
              pointer(fpc_intf_as):=tmpi;
           end
         else
@@ -237,6 +243,8 @@
              tmpi2:=nil;
              if not ((TObject(S).GetInterfaceWeak(IUnknown,tmpi2) and (IUnknown(tmpi2).QueryInterface(IID,tmpi)=S_OK)) or TObject(S).GetInterface(IID,tmpi)) then
                handleerror(219);
+             // decrease reference count
+             fpc_class_as_intf:=nil;
              pointer(fpc_class_as_intf):=tmpi;
           end
         else