Fix JNI templates 79/6879/3
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 25 May 2017 14:18:28 +0000 (16:18 +0200)
committerNeale Ranns <nranns@cisco.com>
Fri, 26 May 2017 08:20:17 +0000 (08:20 +0000)
The JNI templates around array and object handling are wrong in the
sense that they fail to delete local references for objects which
have been assigned to fields/arrays. Fix this by invoking
DeleteLocalRef.

Change-Id: I1c31d81f4235d821ccd51c96be7b176f64284928
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Signed-off-by: Robert Varga <nite@hq.sk>
src/vpp-api/java/jvpp/gen/jvppgen/types_gen.py

index 93883ba..22018e6 100644 (file)
@@ -83,6 +83,7 @@ object_dto_field_setter_template = Template("""
         jobject ${field_reference_name} = (*env)->NewObject(env, ${field_reference_name}Class,  ${field_reference_name}Constructor);
         ${type_initialization}
         (*env)->SetObjectField(env, dto, ${field_reference_name}FieldId, ${field_reference_name});
+        (*env)->DeleteLocalRef(env, ${field_reference_name});
     }
 """)
 
@@ -96,8 +97,10 @@ object_array_dto_field_setter_template = Template("""
             jobject ${field_reference_name}ArrayElement = (*env)->NewObject(env, ${field_reference_name}Class,  ${field_reference_name}Constructor);
             ${type_initialization}
             (*env)->SetObjectArrayElement(env, ${field_reference_name}, _i, ${field_reference_name}ArrayElement);
+            (*env)->DeleteLocalRef(env, ${field_reference_name}ArrayElement);
         }
         (*env)->SetObjectField(env, dto, ${field_reference_name}FieldId, ${field_reference_name});
+        (*env)->DeleteLocalRef(env, ${field_reference_name});
     }
 """)