[mod_java] Coverity CID 1320753 (Resource leak)

This commit is contained in:
Jakub Karolczyk 2023-04-06 13:26:42 +01:00
parent 73ea37c5ab
commit b02fbc702d

View File

@ -294,64 +294,57 @@ static switch_status_t load_config(JavaVMOption **javaOptions, int *optionCount,
static switch_status_t create_java_vm(JavaVMOption *options, int optionCount, vm_control_t * vmControl) static switch_status_t create_java_vm(JavaVMOption *options, int optionCount, vm_control_t * vmControl)
{ {
jint (JNICALL *pJNI_CreateJavaVM)(JavaVM**,void**,void*); jint (JNICALL *pJNI_CreateJavaVM)(JavaVM**,void**,void*);
switch_status_t status; switch_status_t status;
char *derr = NULL; char *derr = NULL;
pJNI_CreateJavaVM = (jint (*)(JavaVM **, void **, void *))switch_dso_func_sym(javaVMHandle, "JNI_CreateJavaVM", &derr); pJNI_CreateJavaVM = (jint (*)(JavaVM **, void **, void *))switch_dso_func_sym(javaVMHandle, "JNI_CreateJavaVM", &derr);
if (!derr) if (!derr) {
{ JNIEnv *env;
JNIEnv *env; JavaVMInitArgs initArgs;
JavaVMInitArgs initArgs; jint res;
jint res;
memset(&initArgs, 0, sizeof(initArgs)); memset(&initArgs, 0, sizeof(initArgs));
initArgs.version = JNI_VERSION_1_4; initArgs.version = JNI_VERSION_1_4;
initArgs.nOptions = optionCount; initArgs.nOptions = optionCount;
initArgs.options = options; initArgs.options = options;
initArgs.ignoreUnrecognized = JNI_TRUE; initArgs.ignoreUnrecognized = JNI_TRUE;
res = pJNI_CreateJavaVM(&javaVM, (void*) &env, &initArgs); res = pJNI_CreateJavaVM(&javaVM, (void*) &env, &initArgs);
if (res == JNI_OK) if (res == JNI_OK) {
{ /* call FindClass here already so that the Java VM executes the static
// call FindClass here already so that the Java VM executes the static initializer (@see org.freeswitch.Launcher) which loads the jni library
// initializer (@see org.freeswitch.Launcher) which loads the jni library so we can use jni functions right away (for example in the startup method) */
// so we can use jni functions right away (for example in the startup method)
launcherClass = (*env)->FindClass(env, "org/freeswitch/Launcher");
if ( launcherClass == NULL )
{
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to find 'org.freeswitch.Launcher' class!\n");
(*env)->ExceptionDescribe(env);
}
// store a global reference for use in the launch_java() function launcherClass = (*env)->FindClass(env, "org/freeswitch/Launcher");
launcherClass = (*env)->NewGlobalRef(env, launcherClass); if ( launcherClass == NULL ) {
if ( launcherClass == NULL ) switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Unable to find 'org.freeswitch.Launcher' class!\n");
{ (*env)->ExceptionDescribe(env);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Out of memory!\n"); }
(*env)->ExceptionDescribe(env);
status = SWITCH_STATUS_FALSE;
}
else
{
status = SWITCH_STATUS_SUCCESS;
}
(*javaVM)->DetachCurrentThread(javaVM); /* store a global reference for use in the launch_java() function */
} launcherClass = (*env)->NewGlobalRef(env, launcherClass);
else if ( launcherClass == NULL ) {
{ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Out of memory!\n");
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error creating Java VM!\n"); (*env)->ExceptionDescribe(env);
status = SWITCH_STATUS_FALSE; status = SWITCH_STATUS_FALSE;
} } else {
} status = SWITCH_STATUS_SUCCESS;
else }
{
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Specified Java VM doesn't have JNI_CreateJavaVM\n"); (*javaVM)->DetachCurrentThread(javaVM);
status = SWITCH_STATUS_FALSE; } else {
} switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error creating Java VM!\n");
return status; status = SWITCH_STATUS_FALSE;
}
} else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Specified Java VM doesn't have JNI_CreateJavaVM\n");
switch_safe_free(derr);
status = SWITCH_STATUS_FALSE;
}
return status;
} }
SWITCH_MODULE_LOAD_FUNCTION(mod_java_load) SWITCH_MODULE_LOAD_FUNCTION(mod_java_load)