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>
This commit is contained in:

committed by
Damjan Marion

parent
cfba1e2476
commit
c0f6cf36a5
@ -157,6 +157,7 @@ static void vl_api_control_ping_reply_t_handler(
|
||||
|
||||
(*env)->CallVoidMethod(env, rm->registryObject, callbackMethod,
|
||||
dto);
|
||||
(*env)->DeleteLocalRef(env, dto);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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});
|
||||
}
|
||||
""")
|
||||
|
||||
|
@ -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);
|
||||
}""")
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user