bug-hurd
[Top][All Lists]
Advanced

[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

Attachment: pgpp3cFRklmQg.pgp
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]