Browse Source

* Make sure reference count is properly managed

Michaël Van Canneyt 11 months ago
parent
commit
1e6061845e
1 changed files with 15 additions and 7 deletions
  1. 15 7
      packages/wasm-job/src/job.js.pas

+ 15 - 7
packages/wasm-job/src/job.js.pas

@@ -771,7 +771,7 @@ type
     function _getResizable: Boolean;
     function _getResizable: Boolean;
   public
   public
     constructor create (aSize : integer);
     constructor create (aSize : integer);
-    class function GlobalMemory : TJSArrayBuffer;
+    class function GlobalMemory : IJSArrayBuffer;
     function Slice : IJSArrayBuffer;
     function Slice : IJSArrayBuffer;
     function Slice (aStart : NativeInt): IJSArrayBuffer;
     function Slice (aStart : NativeInt): IJSArrayBuffer;
     function Slice (aStart,aEndExclusive : NativeInt): IJSArrayBuffer;
     function Slice (aStart,aEndExclusive : NativeInt): IJSArrayBuffer;
@@ -2294,9 +2294,15 @@ begin
   JobCreate(True,[aSize])
   JobCreate(True,[aSize])
 end;
 end;
 
 
-class function TJSArrayBuffer.GlobalMemory: TJSArrayBuffer;
+class function TJSArrayBuffer.GlobalMemory: IJSArrayBuffer;
+
+var
+  Obj : TJSArrayBuffer;
+
 begin
 begin
-  Result:=JOBCreateGlobal('InstanceBuffer');
+  Obj:=TJSArrayBuffer.JOBCreateGlobal('InstanceBuffer');
+  Obj.FJOBObjectIDOwner:=True;
+  Result:=Obj;
 end;
 end;
 
 
 function TJSArrayBuffer.Slice: IJSArrayBuffer;
 function TJSArrayBuffer.Slice: IJSArrayBuffer;
@@ -2998,7 +3004,6 @@ begin
       inc(p,4);
       inc(p,4);
       Result:=aResultClass.JOBCreateFromID(ObjId);
       Result:=aResultClass.JOBCreateFromID(ObjId);
       Result.JOBObjectIDOwner:=True; // The objects passed are not freed, we need to do it.
       Result.JOBObjectIDOwner:=True; // The objects passed are not freed, we need to do it.
-      // Writeln('Will free ',ObjID);
     end
     end
   else
   else
     raise EJSArgParse.Create(JOBArgNames[p^]);
     raise EJSArgParse.Create(JOBArgNames[p^]);
@@ -4368,9 +4373,10 @@ var
   Buf: array[0..7] of byte;
   Buf: array[0..7] of byte;
   p: PByte;
   p: PByte;
   r: TJOBResult;
   r: TJOBResult;
-  Obj: TJSObject;
+  Obj: IInterface;
   func : TJSFunction;
   func : TJSFunction;
   objid,thisid : TJOBObjectID;
   objid,thisid : TJOBObjectID;
+  Tmp : TJSObject;
 begin
 begin
   FillByte(Buf[0],length(Buf),0);
   FillByte(Buf[0],length(Buf),0);
   p:=@Buf[0];
   p:=@Buf[0];
@@ -4396,8 +4402,10 @@ begin
     end;
     end;
   JOBResult_Object:
   JOBResult_Object:
     begin
     begin
-    Obj:=TJSObject.JOBCreateFromID(PJOBObjectID(p)^);
-    Result:=Obj as IJSObject;
+    Tmp:=TJSObject.JOBCreateFromID(PJOBObjectID(p)^);
+    Obj:=Tmp;
+    Result:=Obj;
+    Obj:=nil;
     end;
     end;
   else
   else
     VarClear(Result);
     VarClear(Result);