JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) { JNIEnv* env; struct rlimit max_files; struct sigaction sa; if ((*vm)->GetEnv(vm, (void**)&env, JNI_VERSION_1_2) != JNI_OK) { return JNI_ERR; } // Check IPv6 support use_IPv6 = check_IPv6(env); // Cache field ID to access Socket.fd f_fd = cache_field(env, "one/nio/net/NativeSocket", "fd", "I"); // Allocate table for thread pointer per file descriptor getrlimit(RLIMIT_NOFILE, &max_files); fd_table = (pthread_t*) calloc(max_files.rlim_max, sizeof(pthread_t)); // Setup dummy signal handler for SIG_WAKEUP, the signal is used to interrupt blocking I/O sa.sa_handler = wakeup_handler; sa.sa_flags = 0; sigemptyset(&sa.sa_mask); sigaction(SIG_WAKEUP, &sa, NULL); return JNI_VERSION_1_2; }
void japron_cache(JNIEnv *env) { if (japron_cached) return; jgmp_cache(env); cache_class(japron_string, "java/lang/String"); cache_class(japron_mpqscalar, "apron/MpqScalar"); cache_class(japron_mpfrscalar, "apron/MpfrScalar"); cache_class(japron_doublescalar, "apron/DoubleScalar"); cache_class(japron_interval, "apron/Interval"); cache_class(japron_coeff, "apron/Coeff"); cache_class(japron_dimchange, "apron/Dimchange"); cache_class(japron_dimperm, "apron/Dimperm"); cache_class(japron_linterm0, "apron/Linterm0"); cache_class(japron_linexpr0, "apron/Linexpr0"); cache_class(japron_lincons0, "apron/Lincons0"); cache_class(japron_generator0, "apron/Generator0"); cache_class(japron_texpr0bin, "apron/Texpr0BinNode"); cache_class(japron_texpr0un, "apron/Texpr0UnNode"); cache_class(japron_texpr0dim, "apron/Texpr0DimNode"); cache_class(japron_texpr0cst, "apron/Texpr0CstNode"); cache_class(japron_texpr0intern, "apron/Texpr0Intern"); cache_class(japron_tcons0, "apron/Tcons0"); cache_class(japron_manager, "apron/Manager"); cache_class(japron_abstract0, "apron/Abstract0"); cache_class(japron_environment, "apron/Environment"); cache_class(japron_dimension, "apron/Dimension"); cache_field(japron_mpqscalar_val, japron_mpqscalar, "val", "Lgmp/Mpq;"); cache_field(japron_mpfrscalar_val, japron_mpfrscalar, "val", "Lgmp/Mpfr;"); cache_field(japron_doublescalar_val, japron_doublescalar, "val", "D"); cache_field(japron_interval_inf, japron_interval, "inf", "Lapron/Scalar;"); cache_field(japron_interval_sup, japron_interval, "sup", "Lapron/Scalar;"); cache_field(japron_dimchange_ptr, japron_dimchange, "ptr", "J"); cache_field(japron_dimperm_ptr, japron_dimperm, "ptr", "J"); cache_field(japron_linterm0_dim, japron_linterm0, "dim", "I"); cache_field(japron_linterm0_coeff, japron_linterm0, "coeff", "Lapron/Coeff;"); cache_field(japron_linexpr0_ptr, japron_linexpr0, "ptr", "J"); cache_field(japron_lincons0_expr, japron_lincons0, "expr", "Lapron/Linexpr0;"); cache_field(japron_lincons0_kind, japron_lincons0, "kind", "I"); cache_field(japron_lincons0_scalar, japron_lincons0, "scalar", "Lapron/Scalar;"); cache_field(japron_generator0_coord, japron_generator0, "coord", "Lapron/Linexpr0;"); cache_field(japron_generator0_kind, japron_generator0, "kind", "I"); cache_field(japron_texpr0bin_op, japron_texpr0bin, "op", "I"); cache_field(japron_texpr0bin_rtype, japron_texpr0bin, "rtype", "I"); cache_field(japron_texpr0bin_rdir, japron_texpr0bin, "rdir", "I"); cache_field(japron_texpr0bin_larg, japron_texpr0bin, "lArg", "Lapron/Texpr0Node;"); cache_field(japron_texpr0bin_rarg, japron_texpr0bin, "rArg", "Lapron/Texpr0Node;"); cache_field(japron_texpr0un_op, japron_texpr0un, "op", "I"); cache_field(japron_texpr0un_rtype, japron_texpr0un, "rtype", "I"); cache_field(japron_texpr0un_rdir, japron_texpr0un, "rdir", "I"); cache_field(japron_texpr0un_arg, japron_texpr0un, "arg", "Lapron/Texpr0Node;"); cache_field(japron_texpr0cst_cst, japron_texpr0cst, "cst", "Lapron/Coeff;"); cache_field(japron_texpr0dim_dim, japron_texpr0dim, "dim", "I"); cache_field(japron_texpr0intern_ptr, japron_texpr0intern, "ptr", "J"); cache_field(japron_tcons0_expr, japron_tcons0, "expr", "Lapron/Texpr0Intern;"); cache_field(japron_tcons0_kind, japron_tcons0, "kind", "I"); cache_field(japron_tcons0_scalar, japron_tcons0, "scalar", "Lapron/Scalar;"); cache_field(japron_manager_ptr, japron_manager, "ptr", "J"); cache_field(japron_abstract0_ptr, japron_abstract0, "ptr", "J"); cache_field(japron_environment_ptr, japron_environment, "ptr", "J"); cache_field(japron_dimension_intdim, japron_dimension, "intDim", "I"); cache_field(japron_dimension_realdim, japron_dimension, "realDim", "I"); cache_init(japron_abstract0); cache_init(japron_dimchange); cache_init(japron_dimperm); cache_init(japron_environment); cache_init(japron_linexpr0); cache_init(japron_manager); cache_init(japron_texpr0intern); japron_cached = 1; }