Hi, I run FreeBSD 7.1-PRERELEASE and with a Perl GTK2 application, Perl hang in umtxn state: PID USERNAME THR PRI NICE SIZE RES STATE TIME WCPU COMMAND 76288 dom 1 53 0 67860K 46080K umtxn 0:02 0.00% perl5.8.8 And the only way to stop the application is kill -9 I tried to use ktrace/kdump and ktrace.out show "_umtx_op" $ kdump -f ktrace.out [...] 13199 perl5.8.8 RET lstat 0 13199 perl5.8.8 CALL gettimeofday(0xbfbfb144,0) 13199 perl5.8.8 RET gettimeofday 0 13199 perl5.8.8 CALL _umtx_op(0xbfbfd18c,0x3,0x1,0,0) 13199 perl5.8.8 RET _umtx_op 0 13199 perl5.8.8 CALL sigprocmask(SIG_BLOCK,0xbfbfd120,0x8121490) 13199 perl5.8.8 RET sigprocmask 0 13199 perl5.8.8 CALL _umtx_op(0x287fb8a0,0x5,0,0,0) 13199 perl5.8.8 RET _umtx_op RESTART 13199 perl5.8.8 PSIG SIGKILL SIG_DFL How to debug this hang? (btw I'm not a developer) $ uname -a FreeBSD freebsd7 7.1-PRERELEASE FreeBSD 7.1-PRERELEASE #15 r184123: Tue Oct 21 16:24:59 CEST 2008 root@freebsd7:/usr/obj/usr/src/sys/GENERIC i386 Thanks for your help, Regards. -- There's this old saying: "Give a man a fish, feed him for a day. Teach a man to fish, feed him for life."
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Dominique Goncalves wrote:> Hi, > > I run FreeBSD 7.1-PRERELEASE and with a Perl GTK2 application, Perl > hang in umtxn state: > > PID USERNAME THR PRI NICE SIZE RES STATE TIME WCPU COMMAND > 76288 dom 1 53 0 67860K 46080K umtxn 0:02 0.00% perl5.8.8 > > And the only way to stop the application is kill -9 > > I tried to use ktrace/kdump and ktrace.out show "_umtx_op" > > $ kdump -f ktrace.out > [...] > 13199 perl5.8.8 RET lstat 0 > 13199 perl5.8.8 CALL gettimeofday(0xbfbfb144,0) > 13199 perl5.8.8 RET gettimeofday 0 > 13199 perl5.8.8 CALL _umtx_op(0xbfbfd18c,0x3,0x1,0,0) > 13199 perl5.8.8 RET _umtx_op 0 > 13199 perl5.8.8 CALL sigprocmask(SIG_BLOCK,0xbfbfd120,0x8121490) > 13199 perl5.8.8 RET sigprocmask 0 > 13199 perl5.8.8 CALL _umtx_op(0x287fb8a0,0x5,0,0,0) > 13199 perl5.8.8 RET _umtx_op RESTART > 13199 perl5.8.8 PSIG SIGKILL SIG_DFL > > > How to debug this hang? (btw I'm not a developer)You can try rebuilding perl with debugging information. I am not sure this is the best way but I have used this in my /etc/make.conf: # Disable binaries stripping. STRIP# Add debugging info to binaries. CFLAGS?CFLAGS+= -g3 -ggdb CXXFLAGS?CXXFLAGS+= -g3 -ggdb When you have that, try running your test case again. When it blocks again, attach GDB to the hung process: gdb -p PID `which perl`. And then obtain the call stack: (gdb) bt. I suspect there will be some pthreads call on top of the stack. I am not FreeBSD developer but this seems really similar to situations reported in thread "umtxn and Apache 2.2" and mine "Process in "uwait" state".> > $ uname -a > FreeBSD freebsd7 7.1-PRERELEASE FreeBSD 7.1-PRERELEASE #15 r184123: > Tue Oct 21 16:24:59 CEST 2008 > root@freebsd7:/usr/obj/usr/src/sys/GENERIC i386 > > Thanks for your help, > Regards. >- -- VH -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (MingW32) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iFYEAREIAAYFAkkJfx8ACgkQhQBMvHf/WHnzuwDffY0A82o1mpzdVBixQ6bjeqon pLikFIEvlXke3ADeIGmhTjnC5TPnJE01XiiZyPuOcrrgYpXhFzTdPw==KOCn -----END PGP SIGNATURE-----