On 14.08.2012 13:39 (UTC+2), Juergen Lock wrote:
[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 <n...@jelal.kn-bremen.de> 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 <kab...@gmail.com> 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. :)
After svn update of r239253 from head, I built and install 10.0-CURRENT
amd64. Now vlc-2.0.3 with pulseaudio and inotify enabled builds and
installs out of the box :-)
Many thanks!
Rainer
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
_______________________________________________
freebsd-ports@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ports
To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"