X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fjava.c;h=67740ac8dae78c6da33a4d47891c9824fa04096a;hb=51181b899668ad2c232a152d6e5e787c4eb049cc;hp=e4b10bebb4f543bb74d3772f0894247c96c38f30;hpb=de155ccd5c6ec9f58ae26ef8041b0b634c9d59cf;p=collectd.git diff --git a/src/java.c b/src/java.c index e4b10beb..67740ac8 100644 --- a/src/java.c +++ b/src/java.c @@ -17,16 +17,16 @@ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: - * Florian octo Forster + * Florian octo Forster * Justo Alonso Achaques **/ #include "collectd.h" + #include "plugin.h" #include "common.h" #include "filter_chain.h" -#include #include #if !defined(JNI_VERSION_1_2) @@ -120,7 +120,7 @@ static int cjni_match_target_destroy (void **user_data); static int cjni_match_target_invoke (const data_set_t *ds, value_list_t *vl, notification_meta_t **meta, void **user_data); -/* +/* * C to Java conversion functions */ static int ctoj_string (JNIEnv *jvm_env, /* {{{ */ @@ -159,6 +159,23 @@ static int ctoj_string (JNIEnv *jvm_env, /* {{{ */ return (0); } /* }}} int ctoj_string */ +static jstring ctoj_output_string (JNIEnv *jvm_env, /* {{{ */ + const char *string) +{ + jstring o_string; + + /* Create a java.lang.String */ + o_string = (*jvm_env)->NewStringUTF (jvm_env, + (string != NULL) ? string : ""); + if (o_string == NULL) + { + ERROR ("java plugin: ctoj_output_string: NewStringUTF failed."); + return NULL; + } + + return (o_string); +} /* }}} int ctoj_output_string */ + static int ctoj_int (JNIEnv *jvm_env, /* {{{ */ jint value, jclass class_ptr, jobject object_ptr, const char *method_name) @@ -490,7 +507,6 @@ static jobject ctoj_oconfig_item (JNIEnv *jvm_env, /* {{{ */ jmethodID m_addchild; jobject o_key; jobject o_ocitem; - int i; c_ocitem = (*jvm_env)->FindClass (jvm_env, "org/collectd/api/OConfigItem"); if (c_ocitem == NULL) @@ -555,7 +571,7 @@ static jobject ctoj_oconfig_item (JNIEnv *jvm_env, /* {{{ */ (*jvm_env)->DeleteLocalRef (jvm_env, o_key); /* Call OConfigItem.addValue for each value */ - for (i = 0; i < ci->values_num; i++) /* {{{ */ + for (int i = 0; i < ci->values_num; i++) /* {{{ */ { jobject o_value; @@ -573,7 +589,7 @@ static jobject ctoj_oconfig_item (JNIEnv *jvm_env, /* {{{ */ } /* }}} for (i = 0; i < ci->values_num; i++) */ /* Call OConfigItem.addChild for each child */ - for (i = 0; i < ci->children_num; i++) /* {{{ */ + for (int i = 0; i < ci->children_num; i++) /* {{{ */ { jobject o_child; @@ -601,7 +617,6 @@ static jobject ctoj_data_set (JNIEnv *jvm_env, const data_set_t *ds) /* {{{ */ jmethodID m_add; jobject o_type; jobject o_dataset; - int i; /* Look up the org/collectd/api/DataSet class */ c_dataset = (*jvm_env)->FindClass (jvm_env, "org/collectd/api/DataSet"); @@ -651,7 +666,7 @@ static jobject ctoj_data_set (JNIEnv *jvm_env, const data_set_t *ds) /* {{{ */ /* Decrease reference counter on the java.lang.String object. */ (*jvm_env)->DeleteLocalRef (jvm_env, o_type); - for (i = 0; i < ds->ds_num; i++) + for (size_t i = 0; i < ds->ds_num; i++) { jobject o_datasource; @@ -746,7 +761,6 @@ static jobject ctoj_value_list (JNIEnv *jvm_env, /* {{{ */ jmethodID m_valuelist_constructor; jobject o_valuelist; int status; - int i; /* First, create a new ValueList instance.. * Look up the class.. */ @@ -829,7 +843,7 @@ static jobject ctoj_value_list (JNIEnv *jvm_env, /* {{{ */ return (NULL); } - for (i = 0; i < vl->values_len; i++) + for (size_t i = 0; i < vl->values_len; i++) { status = ctoj_value_list_add_value (jvm_env, vl->values[i], ds->ds[i].type, c_valuelist, o_valuelist); @@ -1100,7 +1114,6 @@ static int jtoc_values_array (JNIEnv *jvm_env, /* {{{ */ value_t *values; int values_num; - int i; values_num = ds->ds_num; @@ -1160,7 +1173,7 @@ static int jtoc_values_array (JNIEnv *jvm_env, /* {{{ */ BAIL_OUT (-1); } - for (i = 0; i < values_num; i++) + for (int i = 0; i < values_num; i++) { jobject o_number; int status; @@ -1319,7 +1332,7 @@ static int jtoc_notification (JNIEnv *jvm_env, notification_t *n, /* {{{ */ return (0); } /* }}} int jtoc_notification */ -/* +/* * Functions accessible from Java */ static jint JNICALL cjni_api_dispatch_values (JNIEnv *jvm_env, /* {{{ */ @@ -1347,12 +1360,9 @@ static jint JNICALL cjni_api_dispatch_values (JNIEnv *jvm_env, /* {{{ */ static jint JNICALL cjni_api_dispatch_notification (JNIEnv *jvm_env, /* {{{ */ jobject this, jobject o_notification) { - notification_t n; + notification_t n = { 0 }; int status; - memset (&n, 0, sizeof (n)); - n.meta = NULL; - status = jtoc_notification (jvm_env, &n, o_notification); if (status != 0) { @@ -1407,7 +1417,6 @@ static jint JNICALL cjni_api_register_init (JNIEnv *jvm_env, /* {{{ */ static jint JNICALL cjni_api_register_read (JNIEnv *jvm_env, /* {{{ */ jobject this, jobject o_name, jobject o_read) { - user_data_t ud; cjni_callback_info_t *cbi; cbi = cjni_callback_info_create (jvm_env, o_name, o_read, CB_TYPE_READ); @@ -1416,12 +1425,13 @@ static jint JNICALL cjni_api_register_read (JNIEnv *jvm_env, /* {{{ */ DEBUG ("java plugin: Registering new read callback: %s", cbi->name); - memset (&ud, 0, sizeof (ud)); - ud.data = (void *) cbi; - ud.free_func = cjni_callback_info_destroy; + user_data_t ud = { + .data = cbi, + .free_func = cjni_callback_info_destroy + }; plugin_register_complex_read (/* group = */ NULL, cbi->name, cjni_read, - /* interval = */ NULL, &ud); + /* interval = */ 0, &ud); (*jvm_env)->DeleteLocalRef (jvm_env, o_read); @@ -1431,7 +1441,6 @@ static jint JNICALL cjni_api_register_read (JNIEnv *jvm_env, /* {{{ */ static jint JNICALL cjni_api_register_write (JNIEnv *jvm_env, /* {{{ */ jobject this, jobject o_name, jobject o_write) { - user_data_t ud; cjni_callback_info_t *cbi; cbi = cjni_callback_info_create (jvm_env, o_name, o_write, CB_TYPE_WRITE); @@ -1440,9 +1449,10 @@ static jint JNICALL cjni_api_register_write (JNIEnv *jvm_env, /* {{{ */ DEBUG ("java plugin: Registering new write callback: %s", cbi->name); - memset (&ud, 0, sizeof (ud)); - ud.data = (void *) cbi; - ud.free_func = cjni_callback_info_destroy; + user_data_t ud = { + .data = cbi, + .free_func = cjni_callback_info_destroy + }; plugin_register_write (cbi->name, cjni_write, &ud); @@ -1454,7 +1464,6 @@ static jint JNICALL cjni_api_register_write (JNIEnv *jvm_env, /* {{{ */ static jint JNICALL cjni_api_register_flush (JNIEnv *jvm_env, /* {{{ */ jobject this, jobject o_name, jobject o_flush) { - user_data_t ud; cjni_callback_info_t *cbi; cbi = cjni_callback_info_create (jvm_env, o_name, o_flush, CB_TYPE_FLUSH); @@ -1463,9 +1472,10 @@ static jint JNICALL cjni_api_register_flush (JNIEnv *jvm_env, /* {{{ */ DEBUG ("java plugin: Registering new flush callback: %s", cbi->name); - memset (&ud, 0, sizeof (ud)); - ud.data = (void *) cbi; - ud.free_func = cjni_callback_info_destroy; + user_data_t ud = { + .data = cbi, + .free_func = cjni_callback_info_destroy + }; plugin_register_flush (cbi->name, cjni_flush, &ud); @@ -1484,7 +1494,6 @@ static jint JNICALL cjni_api_register_shutdown (JNIEnv *jvm_env, /* {{{ */ static jint JNICALL cjni_api_register_log (JNIEnv *jvm_env, /* {{{ */ jobject this, jobject o_name, jobject o_log) { - user_data_t ud; cjni_callback_info_t *cbi; cbi = cjni_callback_info_create (jvm_env, o_name, o_log, CB_TYPE_LOG); @@ -1493,9 +1502,10 @@ static jint JNICALL cjni_api_register_log (JNIEnv *jvm_env, /* {{{ */ DEBUG ("java plugin: Registering new log callback: %s", cbi->name); - memset (&ud, 0, sizeof (ud)); - ud.data = (void *) cbi; - ud.free_func = cjni_callback_info_destroy; + user_data_t ud = { + .data = cbi, + .free_func = cjni_callback_info_destroy + }; plugin_register_log (cbi->name, cjni_log, &ud); @@ -1507,7 +1517,6 @@ static jint JNICALL cjni_api_register_log (JNIEnv *jvm_env, /* {{{ */ static jint JNICALL cjni_api_register_notification (JNIEnv *jvm_env, /* {{{ */ jobject this, jobject o_name, jobject o_notification) { - user_data_t ud; cjni_callback_info_t *cbi; cbi = cjni_callback_info_create (jvm_env, o_name, o_notification, @@ -1517,9 +1526,10 @@ static jint JNICALL cjni_api_register_notification (JNIEnv *jvm_env, /* {{{ */ DEBUG ("java plugin: Registering new notification callback: %s", cbi->name); - memset (&ud, 0, sizeof (ud)); - ud.data = (void *) cbi; - ud.free_func = cjni_callback_info_destroy; + user_data_t ud = { + .data = cbi, + .free_func = cjni_callback_info_destroy + }; plugin_register_notification (cbi->name, cjni_notification, &ud); @@ -1551,9 +1561,8 @@ static jint JNICALL cjni_api_register_match_target (JNIEnv *jvm_env, /* {{{ */ if (type == CB_TYPE_MATCH) { - match_proc_t m_proc; + match_proc_t m_proc = { 0 }; - memset (&m_proc, 0, sizeof (m_proc)); m_proc.create = cjni_match_target_create; m_proc.destroy = cjni_match_target_destroy; m_proc.match = (void *) cjni_match_target_invoke; @@ -1562,9 +1571,8 @@ static jint JNICALL cjni_api_register_match_target (JNIEnv *jvm_env, /* {{{ */ } else if (type == CB_TYPE_TARGET) { - target_proc_t t_proc; + target_proc_t t_proc = { 0 }; - memset (&t_proc, 0, sizeof (t_proc)); t_proc.create = cjni_match_target_create; t_proc.destroy = cjni_match_target_destroy; t_proc.invoke = cjni_match_target_invoke; @@ -1629,6 +1637,11 @@ static void JNICALL cjni_api_log (JNIEnv *jvm_env, /* {{{ */ (*jvm_env)->ReleaseStringUTFChars (jvm_env, o_message, c_str); } /* }}} void cjni_api_log */ +static jstring JNICALL cjni_api_get_hostname (JNIEnv *jvm_env, jobject this) +{ + return ctoj_output_string(jvm_env, hostname_g); +} + /* List of ``native'' functions, i. e. C-functions that can be called from * Java. */ static JNINativeMethod jni_api_functions[] = /* {{{ */ @@ -1688,6 +1701,11 @@ static JNINativeMethod jni_api_functions[] = /* {{{ */ { "log", "(ILjava/lang/String;)V", cjni_api_log }, + + { "getHostname", + "()Ljava/lang/String;", + cjni_api_get_hostname }, + }; static size_t jni_api_functions_num = sizeof (jni_api_functions) / sizeof (jni_api_functions[0]); @@ -1774,14 +1792,13 @@ static cjni_callback_info_t *cjni_callback_info_create (JNIEnv *jvm_env, /* {{{ return (NULL); } - cbi = (cjni_callback_info_t *) malloc (sizeof (*cbi)); + cbi = calloc (1, sizeof (*cbi)); if (cbi == NULL) { - ERROR ("java plugin: cjni_callback_info_create: malloc failed."); + ERROR ("java plugin: cjni_callback_info_create: calloc failed."); (*jvm_env)->ReleaseStringUTFChars (jvm_env, o_name, c_name); return (NULL); } - memset (cbi, 0, sizeof (*cbi)); cbi->type = type; cbi->name = strdup (c_name); @@ -1790,6 +1807,7 @@ static cjni_callback_info_t *cjni_callback_info_create (JNIEnv *jvm_env, /* {{{ pthread_mutex_unlock (&java_callbacks_lock); ERROR ("java plugin: cjni_callback_info_create: strdup failed."); (*jvm_env)->ReleaseStringUTFChars (jvm_env, o_name, c_name); + sfree (cbi); return (NULL); } @@ -1799,7 +1817,8 @@ static cjni_callback_info_t *cjni_callback_info_create (JNIEnv *jvm_env, /* {{{ if (cbi->object == NULL) { ERROR ("java plugin: cjni_callback_info_create: NewGlobalRef failed."); - free (cbi); + sfree (cbi->name); + sfree (cbi); return (NULL); } @@ -1807,7 +1826,9 @@ static cjni_callback_info_t *cjni_callback_info_create (JNIEnv *jvm_env, /* {{{ if (cbi->class == NULL) { ERROR ("java plugin: cjni_callback_info_create: GetObjectClass failed."); - free (cbi); + (*jvm_env)->DeleteGlobalRef (jvm_env, cbi->object); + sfree (cbi->name); + sfree (cbi); return (NULL); } @@ -1818,7 +1839,9 @@ static cjni_callback_info_t *cjni_callback_info_create (JNIEnv *jvm_env, /* {{{ ERROR ("java plugin: cjni_callback_info_create: " "Cannot find the `%s' method with signature `%s'.", method_name, method_signature); - free (cbi); + (*jvm_env)->DeleteGlobalRef (jvm_env, cbi->object); + sfree (cbi->name); + sfree (cbi); return (NULL); } @@ -1873,7 +1896,7 @@ static int cjni_callback_register (JNIEnv *jvm_env, /* {{{ */ pthread_mutex_lock (&java_callbacks_lock); - tmp = (cjni_callback_info_t *) realloc (java_callbacks, + tmp = realloc (java_callbacks, (java_callbacks_num + 1) * sizeof (*java_callbacks)); if (tmp == NULL) { @@ -1954,11 +1977,10 @@ static int cjni_init_native (JNIEnv *jvm_env) /* {{{ */ static int cjni_create_jvm (void) /* {{{ */ { JNIEnv *jvm_env; - JavaVMInitArgs vm_args; + JavaVMInitArgs vm_args = { 0 }; JavaVMOption vm_options[jvm_argc]; int status; - size_t i; if (jvm != NULL) return (0); @@ -1973,12 +1995,11 @@ static int cjni_create_jvm (void) /* {{{ */ jvm_env = NULL; - memset (&vm_args, 0, sizeof (vm_args)); vm_args.version = JNI_VERSION_1_2; vm_args.options = vm_options; vm_args.nOptions = (jint) jvm_argc; - for (i = 0; i < jvm_argc; i++) + for (size_t i = 0; i < jvm_argc; i++) { DEBUG ("java plugin: cjni_create_jvm: jvm_argv[%zu] = %s", i, jvm_argv[i]); @@ -2034,13 +2055,12 @@ static JNIEnv *cjni_thread_attach (void) /* {{{ */ if (cjni_env == NULL) { /* This pointer is free'd in `cjni_jvm_env_destroy'. */ - cjni_env = (cjni_jvm_env_t *) malloc (sizeof (*cjni_env)); + cjni_env = calloc (1, sizeof (*cjni_env)); if (cjni_env == NULL) { - ERROR ("java plugin: cjni_thread_attach: malloc failed."); + ERROR ("java plugin: cjni_thread_attach: calloc failed."); return (NULL); } - memset (cjni_env, 0, sizeof (*cjni_env)); cjni_env->reference_counter = 0; cjni_env->jvm_env = NULL; @@ -2055,11 +2075,10 @@ static JNIEnv *cjni_thread_attach (void) /* {{{ */ else { int status; - JavaVMAttachArgs args; + JavaVMAttachArgs args = { 0 }; assert (cjni_env->jvm_env == NULL); - memset (&args, 0, sizeof (args)); args.version = JNI_VERSION_1_2; status = (*jvm)->AttachCurrentThread (jvm, (void *) &jvm_env, (void *) &args); @@ -2115,7 +2134,7 @@ static int cjni_thread_detach (void) /* {{{ */ cjni_env->jvm_env = NULL; return (0); -} /* }}} JNIEnv *cjni_thread_attach */ +} /* }}} int cjni_thread_detach */ static int cjni_config_add_jvm_arg (oconfig_item_t *ci) /* {{{ */ { @@ -2136,7 +2155,7 @@ static int cjni_config_add_jvm_arg (oconfig_item_t *ci) /* {{{ */ return (-1); } - tmp = (char **) realloc (jvm_argv, sizeof (char *) * (jvm_argc + 1)); + tmp = realloc (jvm_argv, sizeof (char *) * (jvm_argc + 1)); if (tmp == NULL) { ERROR ("java plugin: realloc failed."); @@ -2172,7 +2191,7 @@ static int cjni_config_load_plugin (oconfig_item_t *ci) /* {{{ */ if (jvm_env == NULL) return (-1); - class = (java_plugin_class_t *) realloc (java_classes_list, + class = realloc (java_classes_list, (java_classes_list_len + 1) * sizeof (*java_classes_list)); if (class == NULL) { @@ -2197,8 +2216,7 @@ static int cjni_config_load_plugin (oconfig_item_t *ci) /* {{{ */ { /* Replace all dots ('.') with slashes ('/'). Dots are usually used thorough the Java community, but (Sun's) `FindClass' and friends need slashes. */ - size_t i; - for (i = 0; class->name[i] != 0; i++) + for (size_t i = 0; class->name[i] != 0; i++) if (class->name[i] == '.') class->name[i] = '/'; } @@ -2256,7 +2274,6 @@ static int cjni_config_plugin_block (oconfig_item_t *ci) /* {{{ */ cjni_callback_info_t *cbi; jobject o_ocitem; const char *name; - size_t i; jclass class; jmethodID method; @@ -2271,7 +2288,7 @@ static int cjni_config_plugin_block (oconfig_item_t *ci) /* {{{ */ name = ci->values[0].value.string; cbi = NULL; - for (i = 0; i < java_callbacks_num; i++) + for (size_t i = 0; i < java_callbacks_num; i++) { if (java_callbacks[i].type != CB_TYPE_CONFIG) continue; @@ -2323,12 +2340,11 @@ static int cjni_config_perform (oconfig_item_t *ci) /* {{{ */ int success; int errors; int status; - int i; success = 0; errors = 0; - for (i = 0; i < ci->children_num; i++) + for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -2468,7 +2484,6 @@ static int cjni_read (user_data_t *ud) /* {{{ */ { JNIEnv *jvm_env; cjni_callback_info_t *cbi; - int status; int ret_status; if (jvm == NULL) @@ -2492,13 +2507,7 @@ static int cjni_read (user_data_t *ud) /* {{{ */ ret_status = (*jvm_env)->CallIntMethod (jvm_env, cbi->object, cbi->method); - status = cjni_thread_detach (); - if (status != 0) - { - ERROR ("java plugin: cjni_read: cjni_thread_detach failed."); - return (-1); - } - + cjni_thread_detach (); return (ret_status); } /* }}} int cjni_read */ @@ -2509,7 +2518,6 @@ static int cjni_write (const data_set_t *ds, const value_list_t *vl, /* {{{ */ JNIEnv *jvm_env; cjni_callback_info_t *cbi; jobject vl_java; - int status; int ret_status; if (jvm == NULL) @@ -2534,6 +2542,7 @@ static int cjni_write (const data_set_t *ds, const value_list_t *vl, /* {{{ */ if (vl_java == NULL) { ERROR ("java plugin: cjni_write: ctoj_value_list failed."); + cjni_thread_detach (); return (-1); } @@ -2542,13 +2551,7 @@ static int cjni_write (const data_set_t *ds, const value_list_t *vl, /* {{{ */ (*jvm_env)->DeleteLocalRef (jvm_env, vl_java); - status = cjni_thread_detach (); - if (status != 0) - { - ERROR ("java plugin: cjni_write: cjni_thread_detach failed."); - return (-1); - } - + cjni_thread_detach (); return (ret_status); } /* }}} int cjni_write */ @@ -2560,7 +2563,6 @@ static int cjni_flush (cdtime_t timeout, const char *identifier, /* {{{ */ cjni_callback_info_t *cbi; jobject o_timeout; jobject o_identifier; - int status; int ret_status; if (jvm == NULL) @@ -2587,6 +2589,7 @@ static int cjni_flush (cdtime_t timeout, const char *identifier, /* {{{ */ { ERROR ("java plugin: cjni_flush: Converting double " "to Number object failed."); + cjni_thread_detach (); return (-1); } @@ -2598,6 +2601,7 @@ static int cjni_flush (cdtime_t timeout, const char *identifier, /* {{{ */ { (*jvm_env)->DeleteLocalRef (jvm_env, o_timeout); ERROR ("java plugin: cjni_flush: NewStringUTF failed."); + cjni_thread_detach (); return (-1); } } @@ -2608,13 +2612,7 @@ static int cjni_flush (cdtime_t timeout, const char *identifier, /* {{{ */ (*jvm_env)->DeleteLocalRef (jvm_env, o_identifier); (*jvm_env)->DeleteLocalRef (jvm_env, o_timeout); - status = cjni_thread_detach (); - if (status != 0) - { - ERROR ("java plugin: cjni_flush: cjni_thread_detach failed."); - return (-1); - } - + cjni_thread_detach (); return (ret_status); } /* }}} int cjni_flush */ @@ -2640,7 +2638,10 @@ static void cjni_log (int severity, const char *message, /* {{{ */ o_message = (*jvm_env)->NewStringUTF (jvm_env, message); if (o_message == NULL) + { + cjni_thread_detach (); return; + } (*jvm_env)->CallVoidMethod (jvm_env, cbi->object, cbi->method, (jint) severity, o_message); @@ -2658,7 +2659,6 @@ static int cjni_notification (const notification_t *n, /* {{{ */ JNIEnv *jvm_env; cjni_callback_info_t *cbi; jobject o_notification; - int status; int ret_status; if (jvm == NULL) @@ -2683,6 +2683,7 @@ static int cjni_notification (const notification_t *n, /* {{{ */ if (o_notification == NULL) { ERROR ("java plugin: cjni_notification: ctoj_notification failed."); + cjni_thread_detach (); return (-1); } @@ -2691,13 +2692,7 @@ static int cjni_notification (const notification_t *n, /* {{{ */ (*jvm_env)->DeleteLocalRef (jvm_env, o_notification); - status = cjni_thread_detach (); - if (status != 0) - { - ERROR ("java plugin: cjni_read: cjni_thread_detach failed."); - return (-1); - } - + cjni_thread_detach (); return (ret_status); } /* }}} int cjni_notification */ @@ -2712,7 +2707,6 @@ static int cjni_match_target_create (const oconfig_item_t *ci, /* {{{ */ jobject o_ci; jobject o_tmp; int type; - size_t i; cbi_ret = NULL; o_ci = NULL; @@ -2725,24 +2719,20 @@ static int cjni_match_target_create (const oconfig_item_t *ci, /* {{{ */ (*jvm_env)->DeleteLocalRef (jvm_env, cbi_ret->object); \ } \ free (cbi_ret); \ - if (jvm_env != NULL) { \ - if (o_ci != NULL) \ - (*jvm_env)->DeleteLocalRef (jvm_env, o_ci); \ - cjni_thread_detach (); \ - } \ + if (o_ci != NULL) \ + (*jvm_env)->DeleteLocalRef (jvm_env, o_ci); \ + cjni_thread_detach (); \ return (status) if (jvm == NULL) { ERROR ("java plugin: cjni_read: jvm == NULL"); - BAIL_OUT (-1); + return (-1); } jvm_env = cjni_thread_attach (); if (jvm_env == NULL) - { - BAIL_OUT (-1); - } + return (-1); /* Find out whether to create a match or a target. */ if (strcasecmp ("Match", ci->key) == 0) @@ -2761,7 +2751,7 @@ static int cjni_match_target_create (const oconfig_item_t *ci, /* {{{ */ /* Lets see if we have a matching factory here.. */ cbi_factory = NULL; - for (i = 0; i < java_callbacks_num; i++) + for (size_t i = 0; i < java_callbacks_num; i++) { if (java_callbacks[i].type != type) continue; @@ -2793,13 +2783,13 @@ static int cjni_match_target_create (const oconfig_item_t *ci, /* {{{ */ /* Allocate a new callback info structure. This is going to be our user_data * pointer. */ - cbi_ret = (cjni_callback_info_t *) malloc (sizeof (*cbi_ret)); + cbi_ret = calloc (1, sizeof (*cbi_ret)); if (cbi_ret == NULL) { - ERROR ("java plugin: cjni_match_target_create: malloc failed."); + ERROR ("java plugin: cjni_match_target_create: calloc failed."); BAIL_OUT (-1); } - memset (cbi_ret, 0, sizeof (*cbi_ret)); + cbi_ret->object = NULL; cbi_ret->type = type; @@ -2915,9 +2905,8 @@ static int cjni_match_target_invoke (const data_set_t *ds, /* {{{ */ * `value_list_t'. */ if (cbi->type == CB_TYPE_TARGET) { - value_list_t new_vl; + value_list_t new_vl = { 0 }; - memset (&new_vl, 0, sizeof (new_vl)); status = jtoc_value_list (jvm_env, &new_vl, o_vl); if (status != 0) { @@ -2936,10 +2925,7 @@ static int cjni_match_target_invoke (const data_set_t *ds, /* {{{ */ } } /* if (cbi->type == CB_TYPE_TARGET) */ - status = cjni_thread_detach (); - if (status != 0) - ERROR ("java plugin: cjni_read: cjni_thread_detach failed."); - + cjni_thread_detach (); return (ret_status); } /* }}} int cjni_match_target_invoke */ @@ -2947,9 +2933,8 @@ static int cjni_match_target_invoke (const data_set_t *ds, /* {{{ */ static int cjni_init_plugins (JNIEnv *jvm_env) /* {{{ */ { int status; - size_t i; - for (i = 0; i < java_callbacks_num; i++) + for (size_t i = 0; i < java_callbacks_num; i++) { if (java_callbacks[i].type != CB_TYPE_INIT) continue; @@ -2974,9 +2959,8 @@ static int cjni_init_plugins (JNIEnv *jvm_env) /* {{{ */ static int cjni_shutdown_plugins (JNIEnv *jvm_env) /* {{{ */ { int status; - size_t i; - for (i = 0; i < java_callbacks_num; i++) + for (size_t i = 0; i < java_callbacks_num; i++) { if (java_callbacks[i].type != CB_TYPE_SHUTDOWN) continue; @@ -2999,15 +2983,13 @@ static int cjni_shutdown_plugins (JNIEnv *jvm_env) /* {{{ */ static int cjni_shutdown (void) /* {{{ */ { JNIEnv *jvm_env; - JavaVMAttachArgs args; + JavaVMAttachArgs args = { 0 }; int status; - size_t i; if (jvm == NULL) return (0); jvm_env = NULL; - memset (&args, 0, sizeof (args)); args.version = JNI_VERSION_1_2; status = (*jvm)->AttachCurrentThread (jvm, (void *) &jvm_env, &args); @@ -3022,7 +3004,7 @@ static int cjni_shutdown (void) /* {{{ */ cjni_shutdown_plugins (jvm_env); /* Release all the global references to callback functions */ - for (i = 0; i < java_callbacks_num; i++) + for (size_t i = 0; i < java_callbacks_num; i++) { if (java_callbacks[i].object != NULL) { @@ -3035,7 +3017,7 @@ static int cjni_shutdown (void) /* {{{ */ sfree (java_callbacks); /* Release all the global references to directly loaded classes. */ - for (i = 0; i < java_classes_list_len; i++) + for (size_t i = 0; i < java_classes_list_len; i++) { if (java_classes_list[i].object != NULL) { @@ -3056,7 +3038,7 @@ static int cjni_shutdown (void) /* {{{ */ pthread_key_delete (jvm_env_key); /* Free the JVM argument list */ - for (i = 0; i < jvm_argc; i++) + for (size_t i = 0; i < jvm_argc; i++) sfree (jvm_argv[i]); jvm_argc = 0; sfree (jvm_argv); @@ -3079,10 +3061,8 @@ static int cjni_init (void) /* {{{ */ if (config_block != NULL) { - cjni_config_perform (config_block); oconfig_free (config_block); - config_block = NULL; } if (jvm == NULL)