Firefox hangs in state 'kqread'

Matthew Dillon dillon at apollo.backplane.com
Sun Mar 20 10:45:43 PST 2005


:Hello,
:
:I have finally come to the conclusion that the problem was introduced between 
:January 30th and February 1st, somewhere in libc_r.
:
:When I replace, on a latest -CURRENT world and kernel, /usr/lib/libc_r.so.4 by
:an older version dating from 01/30, the hangs disappear. 
:..
:
:Regards,
:
:Laurent

    This date range encompasses the first major threading commit for libc.

    I went through the code and one thing stuck out... actually two things
    stuck out.  _kevent() and _flock().

    /usr/src/lib/libc/net/res_send.c appears to call _kevent() when I
    believe it should be calling kevent().

    and /usr/src/lib/libc/yp/yplib.c calls _flock() when I believe it
    should be calling flock().

    David or Joerg... could you check out the use of kevent in 
    net/res_send.c ?

    I compiled a simple program which called res_send() -g -pthread -static
    and objdump -d'd the result.  res_send() appears to call __sys_kevent()
    directly and does not appear to running through libc_r's version of
    kevent().

    Laurent, could you please try this patch, and then recompile and 
    reinstall your libc_r ?

					-Matt
					Matthew Dillon 
					<dillon at xxxxxxxxxxxxx>

Index: net/res_send.c
===================================================================
RCS file: /cvs/src/lib/libc/net/res_send.c,v
retrieving revision 1.4
diff -u -r1.4 res_send.c
--- net/res_send.c	31 Jan 2005 22:29:33 -0000	1.4
+++ net/res_send.c	20 Mar 2005 18:37:38 -0000
@@ -728,7 +728,7 @@
 
 			EV_SET(&kv, s, EVFILT_READ, EV_ADD | EV_ONESHOT, 0,0,0);
 
-			n = _kevent(kq, &kv, 1, &kv, 1, &ts);
+			n = kevent(kq, &kv, 1, &kv, 1, &ts);
 			if (n < 0) {
 				if (errno == EINTR) {
 					(void) gettimeofday(&ctv, NULL);





More information about the Bugs mailing list