[alsa-devel] External PCM hook SO is dlclosed after calling install, making it hard to have hooks in it

Takashi Iwai tiwai at suse.de
Tue Jun 30 08:33:15 CEST 2009


At Tue, 30 Jun 2009 10:20:54 +0400,
Paul Fertser wrote:
> 
> On Tue, Jun 30, 2009 at 08:09:45AM +0200, Takashi Iwai wrote:
> > At Tue, 30 Jun 2009 02:11:01 +0400,
> > Paul Fertser wrote:
> > > I've tried to implement an external shared object to be able to
> > > execute arbitrary functions on PCM device opening and closing. After
> > > quite some source code reading i had an almost working but segfaulting
> > > example. This segfault is because snd_dlclose is called right after
> > > calling a hook install function and therefore i can't snd_pcm_hook_add
> > > functions from the same shared object. To me it looks like a bug but
> > > probably i just don't see how this functionality is intended to be
> > > used. Takashi, git-blame showed that it's you who stuffed this dlclose
> > > call that bothers me ;)
> > 
> > Well, right now, a plugin is designed to be bound with a single PCM
> > instance.  That's why dlcolse is called in snd_pcm_close(). 
> 
> It looks like we're talking about different things. You seem to be
> talking about external PCM plugins, i'm talking about external functions
> for the "hook" PCM plugin. The code i question is in pcm/pcm_hooks.c
> in function snd_pcm_hook_add_conf:
> 
>         if (err >= 0) {
>                 if (args && snd_config_get_string(args, &str) >= 0) {
>                         err = snd_config_search_definition(root,
>                 "hook_args", str, &args);
>                         if (err < 0)
>                                 SNDERR("unknown hook_args %s", str);
>                         else
>                                 err = install_func(pcm, args);
>                         snd_config_delete(args);
>                 } else
>                         err = install_func(pcm, args);
>                 snd_dlclose(h);
>         }

Ah, I understand now.  Yes, this looks like a bug.
Meanwhile, it makes another bug if we just remove it.  There would be
no dlclose(), then.  It'd need resource tracking.  A lack of dlclose
is no serious bug, though.

So... just removing snd_dlclose() there fixes your problem?
If yes, I'll commit the fix.


thanks,

Takashi


More information about the Alsa-devel mailing list