[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
-----
Jaroslav Kysela <perex at perex.cz>
Linux Kernel Sound Maintainer
ALSA Project, Red Hat, Inc.
More information about the Alsa-devel
mailing list