summaryrefslogtreecommitdiffstats
path: root/vpp-api/java/jvpp
diff options
context:
space:
mode:
authorMaros Marsalek <mmarsale@cisco.com>2016-11-16 11:29:33 +0100
committerDamjan Marion <dmarion.lists@gmail.com>2016-11-17 10:04:55 +0000
commitc0f6cf36a519421cac89601a52a85aa792ddc20f (patch)
tree2ab67f362923e051966942fbf48273575555b187 /vpp-api/java/jvpp
parentcfba1e2476f67ea7c17e764316d4a8d55425f663 (diff)
VPP-534 Remove references to DTOs created in JVpp
JVM objects allocated from a native thread need to be freed, they are not subject to GC. Change-Id: If1e140d2ceaec93631735ae7665f45db5aacf7cf Signed-off-by: Maros Marsalek <mmarsale@cisco.com>
Diffstat (limited to 'vpp-api/java/jvpp')
-rw-r--r--vpp-api/java/jvpp/gen/jvppgen/jni_gen.py4
-rw-r--r--vpp-api/java/jvpp/gen/jvppgen/jvpp_c_gen.py2
2 files changed, 6 insertions, 0 deletions
diff --git a/vpp-api/java/jvpp/gen/jvppgen/jni_gen.py b/vpp-api/java/jvpp/gen/jvppgen/jni_gen.py
index 4b03b31d163..eee8660a2b0 100644
--- a/vpp-api/java/jvpp/gen/jvppgen/jni_gen.py
+++ b/vpp-api/java/jvpp/gen/jvppgen/jni_gen.py
@@ -46,6 +46,7 @@ u8_array_dto_field_setter_template = Template("""
jbyteArray ${field_reference_name} = (*env)->NewByteArray(env, ${field_length});
(*env)->SetByteArrayRegion(env, ${field_reference_name}, 0, ${field_length}, (const jbyte*)mp->${c_name});
(*env)->SetObjectField(env, ${object_name}, ${field_reference_name}FieldId, ${field_reference_name});
+ (*env)->DeleteLocalRef(env, ${field_reference_name});
""")
u16_array_dto_field_setter_template = Template("""
@@ -59,6 +60,7 @@ u16_array_dto_field_setter_template = Template("""
(*env)->ReleaseShortArrayElements(env, ${field_reference_name}, ${field_reference_name}ArrayElements, 0);
(*env)->SetObjectField(env, ${object_name}, ${field_reference_name}FieldId, ${field_reference_name});
+ (*env)->DeleteLocalRef(env, ${field_reference_name});
}
""")
@@ -73,6 +75,7 @@ u32_array_dto_field_setter_template = Template("""
(*env)->ReleaseIntArrayElements(env, ${field_reference_name}, ${field_reference_name}ArrayElements, 0);
(*env)->SetObjectField(env, ${object_name}, ${field_reference_name}FieldId, ${field_reference_name});
+ (*env)->DeleteLocalRef(env, ${field_reference_name});
}
""")
@@ -89,6 +92,7 @@ u64_array_dto_field_setter_template = Template("""
(*env)->ReleaseLongArrayElements(env, ${field_reference_name}, ${field_reference_name}ArrayElements, 0);
(*env)->SetObjectField(env, ${object_name}, ${field_reference_name}FieldId, ${field_reference_name});
+ (*env)->DeleteLocalRef(env, ${field_reference_name});
}
""")
diff --git a/vpp-api/java/jvpp/gen/jvppgen/jvpp_c_gen.py b/vpp-api/java/jvpp/gen/jvppgen/jvpp_c_gen.py
index 1a35a6c09c0..5fc84c7b050 100644
--- a/vpp-api/java/jvpp/gen/jvppgen/jvpp_c_gen.py
+++ b/vpp-api/java/jvpp/gen/jvppgen/jvpp_c_gen.py
@@ -222,6 +222,8 @@ static void vl_api_${handler_name}_t_handler (vl_api_${handler_name}_t * mp)
$dto_setters
(*env)->CallVoidMethod(env, plugin_main->callbackObject, callbackMethod, dto);
+ // free DTO as per http://stackoverflow.com/questions/1340938/memory-leak-when-calling-java-code-from-c-using-jni
+ (*env)->DeleteLocalRef(env, dto);
}""")