Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 7 May 2010 14:32:37 -0700
From:      Matt Reimer <mattjreimer@gmail.com>
To:        Steven Hartland <killing@multiplay.co.uk>
Cc:        Kostik Belousov <kostikbel@gmail.com>, freebsd-hackers@freebsd.org, freebsd-stable@freebsd.org
Subject:   Re: nginx + passenger = segv in _rtld_error on restart on FreeBSD8.0?
Message-ID:  <r2mf383264b1005071432x66d4552nfd268b80524d6b1d@mail.gmail.com>
In-Reply-To: <3898B34F179B4BB7917631C532CDF95F@multiplay.co.uk>
References:  <6B44BF0945694D98BC060164D404B5A9@multiplay.co.uk> <20091209102122.GC43143@deviant.kiev.zoral.com.ua> <3898B34F179B4BB7917631C532CDF95F@multiplay.co.uk>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Dec 9, 2009 at 4:20 AM, Steven Hartland <killing@multiplay.co.uk> w=
rote:
>
> ----- Original Message ----- From: "Kostik Belousov" <kostikbel@gmail.com=
>
> To: "Steven Hartland" <killing@multiplay.co.uk>
> Cc: <freebsd-hackers@freebsd.org>; <freebsd-stable@freebsd.org>
> Sent: Wednesday, December 09, 2009 10:21 AM
> Subject: Re: nginx + passenger =3D segv in _rtld_error on restart on
> FreeBSD8.0?
>
> This is the trace once world had been recompiled with:-
> CFLAGS=3D-pipe
> WITH_CTF=3D1
> DEBUG_FLAGS=3D-g
>
>
> #0 =A00x0000000800c95eec in thr_kill () at thr_kill.S:3
> #1 =A00x0000000800b22e9e in _thr_send_sig (thread=3D0x800f06600, sig=3D6)=
 at
> /usr/src/lib/libthr/thread/thr_kern.c:92
> #2 =A00x0000000800b1f878 in _raise (sig=3D6) at
> /usr/src/lib/libthr/thread/thr_sig.c:187
> #3 =A00x0000000800d74003 in abort () at /usr/src/lib/libc/stdlib/abort.c:=
65
> #4 =A00x000000000043b8a7 in Client::threadMain (this=3D0x800f9cf40) at
> ext/nginx/HelperServer.cpp:516
> #5 =A00x0000000000411302 in boost::_mfi::mf0<void, Client>::operator()
> (this=3D0x7fffffa45ea8, p=3D0x800f9cf40) at mem_fn_template.hpp:49
> #6 =A00x0000000000411651 in boost::_bi::list1<boost::_bi::value<Client*>
>>::operator()<boost::_mfi::mf0<void, Client>, boost::_bi::list0>
> (this=3D0x7fffffa45eb8, f=3D@0x7fffffa45ea8, a=3D@0x7fffffa45d7f) at bind=
.hpp:232
> #7 =A00x0000000000411696 in boost::_bi::bind_t<void, boost::_mfi::mf0<voi=
d,
> Client>, boost::_bi::list1<boost::_bi::value<Client*> > >::operator()
> (this=3D0x7fffffa45ea8) at bind_template.hpp:20
> #8 =A00x00000000004116bd in
> boost::detail::function::void_function_obj_invoker0<boost::_bi::bind_t<vo=
id,
> boost::_mfi::mf0<void, Client>, boost::_bi::list1<boost::_bi::value<Clien=
t*>
>> >, void>::invoke (
> =A0 function_obj_ptr=3D@0x7fffffa45ea8) at function_template.hpp:158
> #9 =A00x000000000042e73a in boost::function0<void, std::allocator<void>
>>::operator() (this=3D0x7fffffa45ea0) at function_template.hpp:825
> #10 0x0000000000435760 in oxt::thread::thread_main (func=3D@0x7fffffa45ea=
0,
> data=3D@0x7fffffa45e90) at thread.hpp:107
> #11 0x000000000041310e in
> boost::_bi::list2<boost::_bi::value<boost::function<void ()(),
> std::allocator<void> > >,
> boost::_bi::value<boost::shared_ptr<oxt::thread::thread_data> >
>>::operator()<void (*)(boost::function<void ()(), std::allocator<void> >,
> boost::shared_ptr<oxt::thread::thread_data>), boost::_bi::list0>
> (this=3D0x800f3ee80, f=3D@0x800f3ee78, a=3D@0x7fffffa45f0f) at bind.hpp:2=
89
> #12 0x0000000000413196 in boost::_bi::bind_t<void, void
> (*)(boost::function<void ()(), std::allocator<void> >,
> boost::shared_ptr<oxt::thread::thread_data>),
> boost::_bi::list2<boost::_bi::value<boost::function<void ()(),
> std::allocator<void> > >,
> boost::_bi::value<boost::shared_ptr<oxt::thread::thread_data> > >
>>::operator() (this=3D0x800f3ee78) at bind_template.hpp:20
> #13 0x00000000004131b9 in
> boost::thread::thread_data<boost::_bi::bind_t<void, void
> (*)(boost::function<void ()(), std::allocator<void> >,
> boost::shared_ptr<oxt::thread::thread_data>),
> boost::_bi::list2<boost::_bi::value<boost::function<void ()(),
> std::allocator<void> > >,
> boost::_bi::value<boost::shared_ptr<oxt::thread::thread_data> > > > >::ru=
n
> (this=3D0x800f3ee00) at thread.hpp:130
> #14 0x0000000000443259 in thread_proxy (param=3D0x800f3ee00) at
> ext/boost/src/pthread/thread.cpp:127
> #15 0x0000000800b1badd in thread_start (curthread=3D0x800f06600) at
> /usr/src/lib/libthr/thread/thr_create.c:288
> #16 0x0000000000000000 in ?? ()
> Cannot access memory at address 0x7fffffa46000
> Current language: =A0auto; currently asm
>
> It seems that in the passenger client threads it calls closeStream which
> errors when
> the socket close errors with ENOTCONN
> =A0 =A0 =A0 virtual void closeStream() {
> =A0 =A0 =A0 =A0 =A0 TRACE_POINT();
> =A0 =A0 =A0 =A0 =A0 if (fd !=3D -1) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 int ret =3D syscalls::close(fd);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 fd =3D -1;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (ret =3D=3D -1) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (errno =3D=3D EIO) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 throw SystemException("A writ=
e operation on the
> session stream failed",
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 errno);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } else {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 throw SystemException("Cannot=
 close the session
> stream",
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 errno);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 }
> =A0 =A0 =A0 =A0 =A0 }
> =A0 =A0 =A0 }
>
> This causes it to call abort on the the thread which then crashes the app
> with
> the above stack trace, which seems really weird. Anyone got any ideas?
>
> =A0 Regards
> =A0 steve

Steve,

The patch for PR 144061 works for us.

http://lists.freebsd.org/pipermail/freebsd-hackers/2010-February/030741.htm=
l
http://www.freebsd.org/cgi/query-pr.cgi?pr=3D144061

Matt



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?r2mf383264b1005071432x66d4552nfd268b80524d6b1d>