Hi!
Here's the first patch of a series with the work I have done while
offline. Git was definitely helpful in this regard. :)
When does frontend switching currently happens in d-i? I did not
experience any crash while running a dialog based installation with this
patch. (Using loop-aes encryption to be sure to get the entropy plugin.)
Here's the patch:
This will allow plugins to access frontend API without requiring calls to
dlsym(). Kudos to Steve Langasek for the help to figure this out!
---
packages/cdebconf/debian/changelog | 5 +++++
packages/cdebconf/src/frontend.c | 4 +---
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/packages/cdebconf/debian/changelog b/packages/cdebconf/debian/changelog
index 958c79a..2344d31 100644
--- a/packages/cdebconf/debian/changelog
+++ b/packages/cdebconf/debian/changelog
@@ -17,6 +17,11 @@ cdebconf (0.120) UNRELEASED; urgency=low
[ Joey Hess ]
* Call dh_md5sums.
+ [ Jérémy Bobbio ]
+ * Load frontend with RTLD_NOW | RTLD_GLOBAL to allow plugins to access
+ frontend API without requiring calls to dlsym(). Kudos to Steve Langasek
+ for the help to figure this out!
+
-- Joey Hess <joeyh@debian.org> Fri, 17 Aug 2007 13:54:30 -0400
cdebconf (0.119) unstable; urgency=low
diff --git a/packages/cdebconf/src/frontend.c b/packages/cdebconf/src/frontend.c
index 7dba994..9ab94d3 100644
--- a/packages/cdebconf/src/frontend.c
+++ b/packages/cdebconf/src/frontend.c
@@ -170,9 +170,7 @@ struct frontend *frontend_new(struct configuration *cfg, struct template_db *tdb
question_setvalue(q, modname);
question_deref(q);
snprintf(tmp, sizeof(tmp), "%s/%s.so", modpath, modname);
- //Frontend switching works when dlopening with RTLD_LAZY
- //The real reason why it segfaultes with RTLD_NOW has yet to be found
- if ((dlh = dlopen(tmp, RTLD_LAZY)) == NULL)
+ if ((dlh = dlopen(tmp, RTLD_NOW | RTLD_GLOBAL)) == NULL)
DIE("Cannot load frontend module %s: %s", tmp, dlerror());
if ((mod = (struct frontend_module *)dlsym(dlh, "debconf_frontend_module")) == NULL)
--
Jérémy Bobbio .''`.
lunar@debian.org : :Ⓐ : # apt-get install anarchism
`. `'`
`-
Attachment:
signature.asc
Description: Digital signature