浏览代码

* pas2jni: Explicitly release JNI local refs while executing method pointers.

git-svn-id: trunk@33859 -
yury 9 年之前
父节点
当前提交
c392c6eb2b
共有 1 个文件被更改,包括 7 次插入0 次删除
  1. 7 0
      utils/pas2jni/writer.pas

+ 7 - 0
utils/pas2jni/writer.pas

@@ -1270,6 +1270,9 @@ begin
     Fps.WriteLn('begin');
     Fps.IncI;
     Fps.WriteLn('CurJavaVM^^.GetEnv(CurJavaVM, @_env, JNI_VERSION_1_6);');
+    Fps.WriteLn('_env^^.PushLocalFrame(_env, 100);');
+    Fps.WriteLn('try');
+    Fps.IncI;
     Fps.WriteLn('_MethodPointersCS.Enter;');
     Fps.WriteLn('try');
     Fps.WriteLn('_mpi:=_TMethodPtrInfo(_MethodPointers[-integer(ptruint(Self)) - 1]);', 1);
@@ -1330,6 +1333,10 @@ begin
           end;
     end;
 
+    Fps.DecI;
+    Fps.WriteLn('finally');
+    Fps.WriteLn('_env^^.PopLocalFrame(_env, nil);', 1);
+    Fps.WriteLn('end;');
     Fps.DecI;
     Fps.WriteLn('end;');