From: achill at matrix.gatewaynet.com (Achilleas Mantzios) Date: Mon, 04 Feb 2013 18:55:34 +0200 Subject: [Pljava-dev] FreeBSD pl/java problem In-Reply-To: <1574535.zJ9Qr5fcjM@smadev.internal.net> References: <4461985.cuacIgvZGL@smadev.internal.net> <1574535.zJ9Qr5fcjM@smadev.internal.net> Message-ID: <1629686.dgDv4mylqG@smadev.internal.net> Wrote a very small C postgresql function which simply calls JNI and it hangs as well. #include "postgres.h" #include "utils/elog.h" #include "utils/palloc.h" #include "utils/array.h" #include "utils/builtins.h" #include "storage/bufpage.h" #include "catalog/pg_type.h" #include PG_MODULE_MAGIC; PG_FUNCTION_INFO_V1(jnitest); Datum jnitest(PG_FUNCTION_ARGS); Datum jnitest(PG_FUNCTION_ARGS) { int res; JNIEnv *env; JavaVM *jvm; JavaVMInitArgs vm_args; JavaVMOption *options=NULL; vm_args.version = 0x00010002; vm_args.options = options; vm_args.nOptions = 0; vm_args.ignoreUnrecognized = JNI_TRUE; /* Create the Java VM */ res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); PG_RETURN_POINTER(res); } create function jnitest() RETURNS integer LANGUAGE c AS '$libdir/jnitest', 'jnitest'; dynacom=# select jnitest(); ^^^ hangs On ??? 04 ??? 2013 17:46:03 Achilleas Mantzios wrote: > Just an update on this : > > by inserting some elog statements in ./src/C/pljava/Backend.c > just before JNI_createVM : > > elog(DEBUG1, "Creating JavaVM"); > > elog(INFO,"jstat = %d",jstat); > > //jstat = JNI_createVM(&s_javaVM, &vm_args); > JNIEnv *env; > jstat = JNI_CreateJavaVM(&s_javaVM, (void**)&env, &vm_args); > > elog(INFO,"jstat = %d",jstat); > > it never gets into the second elog, which means it hangs in JNI_CreateJavaVM. > > Outside postgresql i can run JNI programs with no problem. > > Any clues? > > On ????? 04 ?????? 2013 15:17:11 Achilleas Mantzios wrote: > > Hello, > > > > I am running postgresql 9.2.2 with > > openjdk version "1.6.0_32" > > OpenJDK Runtime Environment (build 1.6.0_32-b25) > > OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode) > > On FreeBSD 8.3-RELEASE > > > > I am having trouble even running simple tests like : > > CREATE FUNCTION getsysprop(VARCHAR) > > RETURNS VARCHAR > > AS 'java.lang.System.getProperty' > > LANGUAGE java; > > > > SELECT getsysprop('user.home'); > > > > When i do that, the session hangs, and have to kill -9 the backend. > > > > Searching with truss got : > > > > gettimeofday({1359983241.596250 },0x0) = 0 (0x0) > > gettimeofday({1359983241.596275 },0x0) = 0 (0x0) > > gettimeofday({1359983241.596300 },0x0) = 0 (0x0) > > gettimeofday({1359983241.596327 },0x0) = 0 (0x0) > > gettimeofday({1359983241.596352 },0x0) = 0 (0x0) > > gettimeofday({1359983241.596378 },0x0) = 0 (0x0) > > gettimeofday({1359983241.596403 },0x0) = 0 (0x0) > > gettimeofday({1359983241.596431 },0x0) = 0 (0x0) > > gettimeofday({1359983241.596458 },0x0) = 0 (0x0) > > gettimeofday({1359983241.596482 },0x0) = 0 (0x0) > > gettimeofday({1359983241.596507 },0x0) = 0 (0x0) > > gettimeofday({1359983241.596532 },0x0) = 0 (0x0) > > gettimeofday({1359983241.596556 },0x0) = 0 (0x0) > > _umtx_op(0x7fffffffc7e8,0x3,0x1,0x0,0x0,0x1) = 0 (0x0) > > sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGABRT|SIGEMT|SIGKILL|SIGSYS|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0) > > sigprocmask(SIG_SETMASK,0x0,0x0) = 0 (0x0) > > sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGABRT|SIGEMT|SIGKILL|SIGSYS|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x0) = 0 (0x0) > > sigprocmask(SIG_SETMASK,0x0,0x0) = 0 (0x0) > > > > while ktrace gave : > > > > 98910 initial thread CALL gettimeofday(0x7fffffffc900,0) > > 98910 initial thread RET gettimeofday 0 > > 98910 initial thread CALL gettimeofday(0x7fffffffc900,0) > > 98910 initial thread RET gettimeofday 0 > > 98910 initial thread CALL gettimeofday(0x7fffffffc900,0) > > 98910 initial thread RET gettimeofday 0 > > 98910 initial thread CALL gettimeofday(0x7fffffffc900,0) > > 98910 initial thread RET gettimeofday 0 > > 98910 initial thread CALL gettimeofday(0x7fffffffc940,0) > > 98910 initial thread RET gettimeofday 0 > > 98910 initial thread CALL _umtx_op(0x7fffffffc7e8,0x3,0x1,0,0) > > 98910 initial thread RET _umtx_op 0 > > 98910 initial thread CALL sigprocmask(SIG_BLOCK,0x7fffffffc780,0x8016167d8) > > 98910 initial thread RET sigprocmask 0 > > 98910 initial thread CALL sigprocmask(SIG_SETMASK,0x8016167d8,0) > > 98910 initial thread RET sigprocmask 0 > > 98910 initial thread CALL sigprocmask(SIG_BLOCK,0x7fffffffc6e0,0x8016167d8) > > 98910 initial thread RET sigprocmask 0 > > 98910 initial thread CALL sigprocmask(SIG_SETMASK,0x8016167d8,0) > > 98910 initial thread RET sigprocmask 0 > > 98910 initial thread CALL _umtx_op(0x8f8dc4280,0x11,0,0,0) > > > > I found some relevant problems with FreeBSD systems hanging after an _umtx_op but all those point > > to threading problems that now are solved. I found nothing modern about _umtx_op. > > > > I know FreeBSD is not a "Tier-1" platform for postgresql (nor java), but this is my main platform and i'd like > > to stick with this. > > > > Is there anything i could do to get closer to make pl/java work with FreeBSD? > > > > Of course i will have to reach other communities as well (freebsd-java, etc...) > > but any pointers from you would be just great. > > > > Also read this http://postgresql.1045698.n5.nabble.com/Java-VM-stalls-during-quot-install-jar-quot-td3290754.html thread. > > Very close to my situation. JNI standalone also worked for me. > > > > - > > Achilleas Mantzios > > IT DEV > > IT DEPT > > Dynacom Tankers Mgmt > > _______________________________________________ > > Pljava-dev mailing list > > Pljava-dev at pgfoundry.org > > http://lists.pgfoundry.org/mailman/listinfo/pljava-dev > - > Achilleas Mantzios > IT DEV > IT DEPT > Dynacom Tankers Mgmt > _______________________________________________ > Pljava-dev mailing list > Pljava-dev at pgfoundry.org > http://lists.pgfoundry.org/mailman/listinfo/pljava-dev - Achilleas Mantzios IT DEV IT DEPT Dynacom Tankers Mgmt