From owner-freebsd-multimedia@FreeBSD.ORG Tue Aug 14 11:46:48 2012 Return-Path: Delivered-To: freebsd-multimedia@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7D4CB106567D; Tue, 14 Aug 2012 11:46:48 +0000 (UTC) (envelope-from nox@jelal.kn-bremen.de) Received: from smtp.kn-bremen.de (gelbbaer.kn-bremen.de [78.46.108.116]) by mx1.freebsd.org (Postfix) with ESMTP id 030E98FC1D; Tue, 14 Aug 2012 11:46:47 +0000 (UTC) Received: by smtp.kn-bremen.de (Postfix, from userid 10) id E4E181E000E6; Tue, 14 Aug 2012 13:46:46 +0200 (CEST) Received: from triton8.kn-bremen.de (noident@localhost [127.0.0.1]) by triton8.kn-bremen.de (8.14.4/8.14.4) with ESMTP id q7EBdLBl094458; Tue, 14 Aug 2012 13:39:21 +0200 (CEST) (envelope-from nox@triton8.kn-bremen.de) Received: (from nox@localhost) by triton8.kn-bremen.de (8.14.4/8.14.3/Submit) id q7EBdL4T094457; Tue, 14 Aug 2012 13:39:21 +0200 (CEST) (envelope-from nox) From: Juergen Lock Date: Tue, 14 Aug 2012 13:39:21 +0200 To: Alexander Kabaev Message-ID: <20120814113921.GA94259@triton8.kn-bremen.de> References: <20120812143124.GA21414@triton8.kn-bremen.de> <5027E2EA.2070508@gwdg.de> <20120812171133.GA26625@triton8.kn-bremen.de> <5027E471.1020800@gwdg.de> <5028022B.3020005@gwdg.de> <20120812231210.GA35081@triton8.kn-bremen.de> <20120813024135.3501fcee@kan.dyndns.org> <20120813201242.5108f145@ernst.jennejohn.org> <20120813215212.GA72798@triton8.kn-bremen.de> <20120813191852.1daed223@kan.dyndns.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20120813191852.1daed223@kan.dyndns.org> User-Agent: Mutt/1.5.21 (2010-09-15) Cc: freebsd-multimedia@FreeBSD.org, Juergen Lock , freebsd-ports@FreeBSD.org, Gary Jennejohn Subject: Re: Another vlc 2.0.3 update (new ffmpeg! :) X-BeenThere: freebsd-multimedia@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Multimedia discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Aug 2012 11:46:48 -0000 [Now also posted here:] On Mon, Aug 13, 2012 at 07:18:52PM -0400, Alexander Kabaev wrote: > On Mon, 13 Aug 2012 23:52:12 +0200 > Juergen Lock wrote: > > > On Mon, Aug 13, 2012 at 08:12:42PM +0200, Gary Jennejohn wrote: > > > On Mon, 13 Aug 2012 02:41:35 -0400 > > > Alexander Kabaev wrote: > > > > > > [snip lots of gdb trace] > > > > > > > Please check the use of _SC_GETPW_R_SIZE_MAX in vlcpulse.c. This > > > > constant is unsupported, so the module tries to allocate a stack > > > > buffer with negative size, smashing the stack dead. > > > > > > > > > > Seems like a good idea, but I replaced the rather sloppy > > > buf[sysctl(_SC_GETPW_R_SIZE_MAX)]; > > > with > > > buf[2048]; > > > and vlc still core dumps when trying to generate plugins.dat. > > > > Yeah that seems to be a different issue (rtld). > > Juergen > > Please try this patch. > Thank you, that fixed both the build crash with the pulseaudio knob enabled when the old vlc version was still installed as well as the install crash with the notify knob enabled. :) Juergen > -- > Alexander Kabaev > diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c > index 95358aa..6f6ac70 100644 > --- a/libexec/rtld-elf/rtld.c > +++ b/libexec/rtld-elf/rtld.c > @@ -1743,6 +1743,27 @@ init_dag(Obj_Entry *root) > root->dag_inited = true; > } > > +static void > +process_nodelete(Obj_Entry *root) > +{ > + const Objlist_Entry *elm; > + > + /* > + * Walk over object DAG and process every dependent object > + * that is marked as DF_1_NODELETE. They need to grow own > + * dag, which should then be ref-ed separately. > + */ > + STAILQ_FOREACH(elm, &root->dagmembers, link) { > + if (elm->obj != NULL && elm->obj->z_nodelete && > + !elm->obj->ref_nodel) { > + dbg("obj %s nodelete", elm->obj->path); > + init_dag(elm->obj); > + ref_dag(elm->obj); > + elm->obj->ref_nodel = true; > + } > + } > + root->dag_inited = true; > +} > /* > * Initialize the dynamic linker. The argument is the address at which > * the dynamic linker has been mapped into memory. The primary task of > @@ -1932,12 +1953,6 @@ process_needed(Obj_Entry *obj, Needed_Entry *needed, int flags) > flags & ~RTLD_LO_NOLOAD); > if (obj1 == NULL && !ld_tracing && (flags & RTLD_LO_FILTEES) == 0) > return (-1); > - if (obj1 != NULL && obj1->z_nodelete && !obj1->ref_nodel) { > - dbg("obj %s nodelete", obj1->path); > - init_dag(obj1); > - ref_dag(obj1); > - obj1->ref_nodel = true; > - } > } > return (0); > } > @@ -2833,8 +2848,12 @@ dlopen_object(const char *name, int fd, Obj_Entry *refobj, int lo_flags, > /* Make list of init functions to call. */ > initlist_add_objects(obj, &obj->next, &initlist); > } > + /* > + * Process all no_delete objects here, given them own > + * DAGs to prevent their dependencies from being unloaded. > + */ > + process_nodelete(obj); > } else { > - > /* > * Bump the reference counts for objects on this DAG. If > * this is the first dlopen() call for the object that was