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>