static VALUE rb_sigar_set_logger(VALUE obj, VALUE logger) { SIGAR_GET; if (rb_obj_is_kind_of(logger, rb_cProc) || rb_respond_to(logger, rb_intern("call"))) { sigar_log_impl_set(sigar, rbsigar, rb_sigar_proc_impl); rbsigar->logger = logger; return obj; } /* Have to load Logger to test for it properly */ rb_require("logger"); if (rb_obj_is_kind_of(logger, rb_path2class("Logger"))) { sigar_log_impl_set(sigar, rbsigar, rb_sigar_logger_impl); rbsigar->logger = logger; } else { rb_raise(rb_eArgError, "value is not a proc object or subclass of Logger"); } return obj; }
JNIEXPORT void SIGAR_JNI(SigarLog_setLogger) (JNIEnv *env, jclass classinstance, jobject sigar_obj, jobject logger) { dSIGAR_VOID; if (jsigar->logger != NULL) { JENV->DeleteGlobalRef(env, jsigar->logger); jsigar->logger = NULL; } if (logger) { jsigar->logger = JENV->NewGlobalRef(env, logger); sigar_log_impl_set(sigar, jsigar, jsigar_log_impl); } else { sigar_log_impl_set(sigar, NULL, NULL); } }