[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:09:45 CEST 2009

At Tue, 30 Jun 2009 02:11:01 +0400,
Paul Fertser wrote:
> Hi,
> 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().  Other
use-cases are out of design, thus we need to extend something.

Can you give your code to grasp more implementation images?

> Background information:
> We're working on audio subsystem for OpenMoko Freerunner. It's an idea
> of Joerg Reisenweber to have virtual alsa devices for every reasonable
> use-case (like dedicated device for stereout, dedicated device for
> recording from gsm etc), for that we need a hook on every device
> opening and closing mostly to set up routing inside WM8753
> codec. ctl_elems is not enough because we need a more complex locking
> scheme (with priorities, some kind of callbacks to the apps using
> particular devices etc) and other flexibility.

To hook off snd_pcm_open and snd_pcm_close, you could use LD_PRELOAD.
But, a plugin sounds more interesting.


More information about the Alsa-devel mailing list