On Tue, Dec 30, 2008 at 3:30 AM, Ralf Wildenhues
<address@hidden> wrote:
Hello Lin Yu,
* address@hidden wrote on Thu, Dec 25, 2008 at 03:35:06AM CET:
>
> When I built pulseaudio with "--dlopen force", after that I found pulseaudio
> execution will cause a segment fault.
> In pulseaudio ltmain.sh, lt_preloaded_symbols is set to "{0,(void *)0}".
>
> The problem is at libltdl/loaders/preopen.c.
Thanks for the bug report and patch. Which Libtool/libltdl version did
you encounter the bug with? Which libtool version was the module built
with?
The libltdl version is 2.2.4 -> libltdl.so.7
libtool version is 1.5.26.
Asking because Libtool 2.2.x should always have a non-NULL symlist->name
in the first entry of lt_preloaded_symbols; it should be the name of the
originator.
> address@hidden:~/libtool$ git diff
> diff --git a/libltdl/loaders/preopen.c b/libltdl/loaders/preopen.c
> index 7149287..e5b8c16 100644
> --- a/libltdl/loaders/preopen.c
> +++ b/libltdl/loaders/preopen.c
> @@ -335,6 +335,7 @@ lt_dlpreload_open (const char *originator,
> lt_dlpreload_callback_func *func)
> /* For each symlist in the chain... */
> for (list = preloaded_symlists; list; list = list->next)
> {
> + if ( ! list->symlist->name ) continue;
> /* ...that was preloaded by the requesting ORIGINATOR... */
> if ((originator && streq (list->symlist->name, originator))
> || (!originator && streq (list->symlist->name, "@PROGRAM@")))
>
>
> I checked the libtool-1.5.8, there is code block to check the same
> condition.
Yes; with that old version, I think symlist->name could be NULL.
Cheers,
Ralf