[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
fork: mach_port_mod_refs: EKERN_UREFS_OWERFLOW
From: |
Thomas Schwinge |
Subject: |
fork: mach_port_mod_refs: EKERN_UREFS_OWERFLOW |
Date: |
Mon, 22 Nov 2010 09:38:24 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) |
Hello!
In the GCC testsuite, `expect` had gone bonkers:
$ ps --all --format=hurd-long -w
PID UID PPID PGrp Sess TH Vmem RSS %CPU User System Args
[...]
3567 1000 10295 3567 3567 2 137M 856K 98.2 5hrs 28 hours expect
-- /usr/share/dejagnu/runtest.exp --tool gcc
[...]
GDB on 3567:
(gdb) info threads
2 Thread 3567.2 0x011aaf4c in mach_msg_trap () at
/build/buildd-eglibc_2.11.2-7-hurd-i386-6JVoJz/eglibc-2.11.2/build-tree/hurd-i386-libc/mach/mach_msg_trap.S:2
* 1 Thread 3567.1 0x011aaf9c in swtch_pri () at
/build/buildd-eglibc_2.11.2-7-hurd-i386-6JVoJz/eglibc-2.11.2/build-tree/hurd-i386-libc/mach/swtch_pri.S:2
(gdb) bt
#0 0x011aaf9c in swtch_pri () at
/build/buildd-eglibc_2.11.2-7-hurd-i386-6JVoJz/eglibc-2.11.2/build-tree/hurd-i386-libc/mach/swtch_pri.S:2
#1 0x011ac824 in __spin_lock_solid (lock=0x131e8e0) at spin-solid.c:27
#2 0x011aca1d in __mutex_lock_solid (lock=0x131e8e0) at mutex-solid.c:31
#3 0x0122dd0b in __mutex_lock (oldmem=0x8076458, bytes=94) at
../mach/lock-intern.h:89
#4 __libc_realloc (oldmem=0x8076458, bytes=94) at malloc.c:3814
#5 0x0121de62 in _IO_vasprintf (result_ptr=0x15f40c0, format=0x13098a8
"%s%s%s:%u: %s%sUnexpected error: %s.\n", args=0x15f3c9c "") at vasprintf.c:86
#6 0x01206d1b in ___asprintf (string_ptr=0x15f40c0, format=0x13098a8
"%s%s%s:%u: %s%sUnexpected error: %s.\n") at asprintf.c:37
#7 0x011e2fc8 in __assert_perror_fail (errnum=19, file=0x1305a98
"../sysdeps/mach/hurd/fork.c", line=466, function=0x1305acf "__fork") at
assert-perr.c:62
#8 0x012586c8 in __fork () at ../sysdeps/mach/hurd/fork.c:466
#9 0x011f92e9 in do_system (line=0x15f42dc "/bin/stty sane > /dev/ttypa")
at ../sysdeps/posix/system.c:119
#10 0x0105bea6 in ?? () from /usr/lib/libexpect.so.5.44.1.15
#11 0x0105bf6d in ?? () from /usr/lib/libexpect.so.5.44.1.15
#12 0x0105c229 in exp_getptyslave () from /usr/lib/libexpect.so.5.44.1.15
#13 0x0103e4b2 in ?? () from /usr/lib/libexpect.so.5.44.1.15
#14 0x01087d79 in ?? () from /usr/lib/libtcl8.5.so.0
#15 0x01088beb in ?? () from /usr/lib/libtcl8.5.so.0
#16 0x0108826a in Tcl_EvalEx () from /usr/lib/libtcl8.5.so.0
#17 0x0108985f in TclEvalObjEx () from /usr/lib/libtcl8.5.so.0
[...]
`fork` failed here:
458 /* We have one extra user reference created at the beginning
of this
459 function, accounted for by mach_port_names (and which will
thus be
460 accounted for in the child below). This extra right gets
consumed
461 in the child by the store into _hurd_sigthread in the
child fork. */
462 if (thread_refs > 1 &&
463 (err = __mach_port_mod_refs (newtask, ss->thread,
464 MACH_PORT_RIGHT_SEND,
465 thread_refs)))
466 LOSE;
This is in the parent, before signal thread setup, registering with the
proc server, and starting the new process.
The error is 19, `EKERN_UREFS_OVERFLOW`.
(This is likely also the reason why the error path did not execute
successfully.)
Any ideas?
The full details can be found at
<http://www.bddebian.com:8888/~hurd-web/open_issues/fork_mach_port_mod_refs_ekern_urefs_owerflow/>.
I still have this sitting in GDB, so if you want further data, just ask.
Regards,
Thomas
pgpp3cFRklmQg.pgp
Description: PGP signature
- fork: mach_port_mod_refs: EKERN_UREFS_OWERFLOW,
Thomas Schwinge <=