On Wed, 2003/06/04 at 00:30:36 -0700, Kris Kennaway wrote:
> On Mon, Jun 02, 2003 at 04:15:43PM -0700, Kris Kennaway wrote:
> > phoenix on my sparc64 crashed while idle with the following:
> > 
> > Fatal error '_waitq_insert: Already in queue' at line 321 in file 
> > /usr/src/lib/libc_r/uthread/uthread_priority_queue.c (errno = 2)
> > 
> > Any ideas?

It should have dropped a core - can you please take a look at it with
gdb?

> One of the libc_r tests seems to hang:
> 
> Test static library:
> --------------------------------------------------------------------------
> Test                                      c_user c_system c_total     chng
>  passed/FAILED                            h_user h_system h_total   % chng
> --------------------------------------------------------------------------
> hello_d                                     0.00     0.02    0.02
>  passed
> --------------------------------------------------------------------------
> hello_s                                     0.00     0.02    0.02
>  passed
> --------------------------------------------------------------------------
> join_leak_d                                 0.77     0.18    0.95
>  passed
> --------------------------------------------------------------------------
> mutex_d                                     9.08    92.42  101.50
>  passed
> --------------------------------------------------------------------------
> sem_d                                       0.01     0.02    0.02
>  passed
> --------------------------------------------------------------------------
> sigsuspend_d                                0.00     0.02    0.02
>  passed
> --------------------------------------------------------------------------
> sigwait_d                                   0.00     0.02    0.02
>  *** FAILED ***
> --------------------------------------------------------------------------
> guard_s.pl
> 
> It's been sitting there for hours now.

This an unfortunate failure mode, which is caused by a fault on the
stack while all signals are masked (by libc_r internals, I assume);
the kernel will fail to store the user register windows on the stack,
and because SIGILL is blocked, it cannot notify (or terminate) the
process and is stuck trying to copy out the register windows over and
over.

> P.S. Why do 3 of the tests even fail on i386?

The guard test includes constants which are machine- and
compiler-specific, probably this broke due to a gcc upgrade.

The sigwait test is killed by it's own SIGUSR1, and this behaviour
actually looks correct to me (but I could easily be wrong, since the
signal behaviour of pthreads seems to be quite complex).

The propagate test failure is due to problems in libc (failing to
use the underscored versions of functions overridden in libc_r). The
attached patch should fix that; Daniel, does this look OK to you?

        - Thomas

-- 
Thomas Moestl <[EMAIL PROTECTED]>       http://www.tu-bs.de/~y0015675/
              <[EMAIL PROTECTED]>               http://people.FreeBSD.org/~tmm/
PGP fingerprint: 1C97 A604 2BD0 E492 51D0  9C0F 1FE6 4F1D 419C 776C
Index: gen/sysconf.c
===================================================================
RCS file: /vol/ncvs/src/lib/libc/gen/sysconf.c,v
retrieving revision 1.20
diff -u -r1.20 sysconf.c
--- gen/sysconf.c       17 Nov 2002 08:54:29 -0000      1.20
+++ gen/sysconf.c       4 Jun 2003 20:44:47 -0000
@@ -40,6 +40,7 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD: src/lib/libc/gen/sysconf.c,v 1.20 2002/11/17 08:54:29 dougb Exp 
$");
 
+#include "namespace.h"
 #include <sys/param.h>
 #include <sys/time.h>
 #include <sys/sysctl.h>
@@ -52,6 +53,7 @@
 #include <pthread.h>           /* we just need the limits */
 #include <time.h>
 #include <unistd.h>
+#include "un-namespace.h"
 
 #include "../stdlib/atexit.h"
 #include "../stdtime/tzfile.h"
@@ -560,7 +562,7 @@
                value = socket(PF_INET6, SOCK_DGRAM, 0);
                errno = sverrno;
                if (value >= 0) {
-                       close(value);
+                       _close(value);
                        return (200112L);
                } else
                        return (0);
Index: include/namespace.h
===================================================================
RCS file: /vol/ncvs/src/lib/libc/include/namespace.h,v
retrieving revision 1.16
diff -u -r1.16 namespace.h
--- include/namespace.h 1 May 2003 19:03:13 -0000       1.16
+++ include/namespace.h 4 Jun 2003 20:38:29 -0000
@@ -122,8 +122,10 @@
 /*#define              sigaction                       _sigaction*/
 #define                sigprocmask                     _sigprocmask
 #define                sigsuspend                      _sigsuspend
+#define                sleep                           _sleep
 #define                socket                          _socket
 #define                socketpair                      _socketpair
+#define                wait                            _wait
 #define                wait4                           _wait4
 #define                waitpid                         _waitpid
 #define                write                           _write
@@ -154,10 +156,8 @@
 #define                sigpending                      _sigpending
 #define                sigreturn                       _sigreturn
 #define                sigsetmask                      _sigsetmask
-#define                sleep                           _sleep
 #define                system                          _system
 #define                tcdrain                         _tcdrain
-#define                wait                            _wait
 #endif
 
 #endif /* _NAMESPACE_H_ */
Index: include/un-namespace.h
===================================================================
RCS file: /vol/ncvs/src/lib/libc/include/un-namespace.h,v
retrieving revision 1.13
diff -u -r1.13 un-namespace.h
--- include/un-namespace.h      1 May 2003 19:03:13 -0000       1.13
+++ include/un-namespace.h      4 Jun 2003 20:44:04 -0000
@@ -103,8 +103,10 @@
 #undef         sigaction
 #undef         sigprocmask
 #undef         sigsuspend
+#undef         sleep
 #undef         socket
 #undef         socketpair
+#undef         wait
 #undef         wait4
 #undef         waitpid
 #undef         write
@@ -127,10 +129,8 @@
 #undef         sigpending
 #undef         sigreturn
 #undef         sigsetmask
-#undef         sleep
 #undef         system
 #undef         tcdrain
-#undef         wait
 #endif /* 0 */
 
 #ifdef _SIGNAL_H_
Index: net/rcmdsh.c
===================================================================
RCS file: /vol/ncvs/src/lib/libc/net/rcmdsh.c,v
retrieving revision 1.5
diff -u -r1.5 rcmdsh.c
--- net/rcmdsh.c        27 Feb 2003 13:40:00 -0000      1.5
+++ net/rcmdsh.c        4 Jun 2003 21:01:20 -0000
@@ -36,6 +36,7 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD: src/lib/libc/net/rcmdsh.c,v 1.5 2003/02/27 13:40:00 nectar Exp 
$");
 
+#include "namespace.h"
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/wait.h>
@@ -48,6 +49,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
+#include "un-namespace.h"
 
 #ifndef _PATH_RSH
 #define        _PATH_RSH       "/usr/bin/rsh"
@@ -117,7 +119,7 @@
                /*
                 * Child.  We use sp[1] to be stdin/stdout, and close sp[0].
                 */
-               (void)close(sp[0]);
+               (void)_close(sp[0]);
                if (dup2(sp[1], 0) == -1 || dup2(0, 1) == -1) {
                        perror("rcmdsh: dup2 failed");
                        _exit(255);
@@ -161,9 +163,9 @@
                _exit(255);
        } else {
                /* Parent. close sp[1], return sp[0]. */
-               (void)close(sp[1]);
+               (void)_close(sp[1]);
                /* Reap child. */
-               (void)wait(NULL);
+               (void)_wait(NULL);
                return (sp[0]);
        }
        /* NOTREACHED */
Index: rpc/getnetconfig.c
===================================================================
RCS file: /vol/ncvs/src/lib/libc/rpc/getnetconfig.c,v
retrieving revision 1.9
diff -u -r1.9 getnetconfig.c
--- rpc/getnetconfig.c  16 Feb 2003 17:29:10 -0000      1.9
+++ rpc/getnetconfig.c  4 Jun 2003 20:45:42 -0000
@@ -428,7 +428,7 @@
        fprintf(stderr, "See UPDATING entry 20021216 for details.\n");
        fprintf(stderr, "Continuing in 10 seconds\n\n");
        fprintf(stderr, "This warning will be removed 20030301\n");
-       sleep(10);
+       _sleep(10);
 
     }
 
_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-sparc64
To unsubscribe, send any mail to "[EMAIL PROTECTED]"
_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to