Passenger hangs on live and SEGV on tests possible threading /
kernel bug?
John Baldwin
jhb at freebsd.org
Thu Dec 17 15:45:42 UTC 2009
On Thursday 17 December 2009 6:12:07 am Steven Hartland wrote:
> We're having an issue with Passenger on FreeBSD where it will hang
> and stop processing any more requests the details are attach to
> the following bug report:
> http://code.google.com/p/phusion-passenger/issues/detail?id=318#c14
>
> In addition the test suite crashes in what seems to be a very
> basic test, which I'm at a loss with.
> http://code.google.com/p/phusion-passenger/issues/detail?id=441
>
> I'm thinking this may be a bugs in the FreeBSD either kernel or
> thread library as the crashes don't make any sense from the
> application side.
>
> Any advise on debugging or feedback on the stack traces would
> be much appreciated.
For the hang it seems you have a thread waiting in a blocking read(), a thread
waiting in a blocking accept(), and lots of threads creating condition
variables. However, the pthread_cond_init() in libpthread (libthr on FreeBSD)
doesn't call pthread_cleanup_push(), so your stack trace doesn't make sense to
me. However, that may be gdb getting confused. The pthread_cleanup_push()
frame may be cond_init(). However, it doesn't call umtx_op() (the
_thr_umutex_init() call it makes just initializes the structure, it doesn't
make a _umtx_op() system call). You might try posting on threads@ to try to
get more info on this, but your pthread_cond_init() stack traces don't really
make sense. Can you rebuild libc and libthr with debug symbols?
For example:
# cd /usr/src/lib/libc
# make clean
# make DEBUG_FLAGS=-g
# make DEBUG_FLAGS=-g install
However, if you are hanging in read(), that usually means you have a socket
that just doesn't have data. That might be an application bug of some sort.
The segv trace doesn't include the first part of GDB messages which show which
thread actually had a seg fault. It looks like it was the thread that was
throwing an exception. However, nanosleep() doesn't throw exceptions, so that
stack trace doesn't really make sense either. Perhaps that stack is hosed by
the exception handling code?
--
John Baldwin
More information about the freebsd-hackers
mailing list