mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-07-01 13:22:40 +00:00
[mod_java] Coverity CID 1320753 (Resource leak)
This commit is contained in:
parent
73ea37c5ab
commit
b02fbc702d
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user