[alsa-devel] How to kill thread server_job() in snd_pcm_open()

Jaroslav Kysela perex at perex.cz
Mon Apr 14 08:57:54 CEST 2008

On Mon, 14 Apr 2008, Rong-Jhe wrote:

> Rong-Jhe <r93922118 <at> ntu.edu.tw> writes:
> > 
> > I found that the thread server_job() can not be killed by using snd_pcm_close
> > ().
> > The code in snd_pcm_direct_server_discard() is disabled, and then it can not 
> > send signal to kill the thread.
> > Why the code is disabled?
> > Is there any bugs if I enable the code?
> > 
> I have enabled the code in snd_pcm_direct_server_discard(), but it can not 
> kill the thread of server_job(). The dmix->server_pid is wrong.
> In snd_pcm_direct_server_create(), the main thread uses fork() to establish a 
> child thread and the child uses fork() to establish another child thread again.
> The main thread only keeps the pid of the first child thread, and the second 
> child thread executes server_job(). Do to this, the main thread kills wrong 
> pid.
> Further, the main thread uses waitpid() before keeping the pid of the first 
> child thread, and the first child thread dies after establishing the second 
> child thread. In this way, the pid kept in dmix->server_pid is useless.
> Why does the program need to use fork() two times?

What you're trying to do? The server process will timeout (ends) 
itself when dmix clients are inactive.


Jaroslav Kysela <perex at perex.cz>
Linux Kernel Sound Maintainer
ALSA Project, Red Hat, Inc.

More information about the Alsa-devel mailing list