Hi,
As mentioned in another mail, should not lt_dlloader_add
call vtable->dlloader_init? That seems appropriate when
lt_dlloader_remove calls vtable->dlloade_exit...
Like this (completely untested), just showing what I mean...
Cheers,
Peter
--
They are in the crowd with the answer before the question.
> Why do you dislike Jeopardy?
diff --git a/libltdl/lt_dlloader.c b/libltdl/lt_dlloader.c
index 2c99a22..eac65e4 100644
--- a/libltdl/lt_dlloader.c
+++ b/libltdl/lt_dlloader.c
@@ -74,9 +74,21 @@ lt_dlloader_add (const lt_dlvtable *vtable)
return RETURN_FAILURE;
}
+ if (vtable->dlloader_init)
+ {
+ if ((*vtable->dlloader_init) (vtable->dlloader_data))
+ {
+ LT__SETERROR (INIT_LOADER);
+ return RETURN_FAILURE;
+ }
+ }
+
item = slist_box (vtable);
if (!item)
{
+ if (vtable->dlloader_exit)
+ (*vtable->dlloader_exit) (vtable->dlloader_data);
+
(*lt__alloc_die) ();
/* Let the caller know something went wrong if lt__alloc_die
diff --git a/libltdl/ltdl.c b/libltdl/ltdl.c
index 1fe272f..9067ad5 100644
--- a/libltdl/ltdl.c
+++ b/libltdl/ltdl.c
@@ -188,15 +188,6 @@ loader_init (lt_get_vtable *vtable_func, lt_user_data data)
assert (errors || vtable);
- if ((!errors) && vtable->dlloader_init)
- {
- if ((*vtable->dlloader_init) (vtable->dlloader_data))
- {
- LT__SETERROR (INIT_LOADER);
- ++errors;
- }
- }
-
return errors;
}