dmix in a forked process

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Reading the source of alsa-lib I see that dmix runs in a forked process
*without* exec.

file: src/pcm/pcm_direct.c
function: snd_pcm_direct_server_create

       ret = fork();
       if (ret < 0) {
               close(dmix->server_fd);
               return ret;
       } else if (ret == 0) {
               ret = fork();
               if (ret == 0)
                       server_job(dmix);
               _exit(EXIT_SUCCESS);
       } else {
               waitpid(ret, NULL, 0);
       }

>From what I understand, this is a concern since if our app is the
first to start dmix then a copy of the process (app) will remain till
the system is shutdown ?

Also I see that from alsa-lib 1.0.12 a check is performed before starting dmix.

file: src/pcm/pcm_dmix.c
function: snd_pcm_dmix_open

               if (dmix->shmptr->use_server) {
                       dmix->server_free = dmix_server_free;

                       ret = snd_pcm_direct_server_create(dmix);
                       if (ret < 0) {
                               SNDERR("unable to create server");
                               goto _err;
                       }
               }

When I checked how dmix->shmptr->use_server is set

file: src/pcm/pcm_dmix.c
function: snd_pcm_direct_initialize_slave

               int ver = 0;
               ioctl(spcm->poll_fd, SNDRV_PCM_IOCTL_PVERSION, &ver);
               if (ver < SNDRV_PROTOCOL_VERSION(2, 0, 8))
                       dmix->shmptr->use_server = 1;

So if sndrv version is older than 2.0.8, use_server is set!

So even using alsa-lib greater than 1.0.12 doesn't guarantee that the
forked process (without exec) code path will be avoided.

I'm currently porting the sound code of our app from OSS to ALSA but
this problem is preventing me from doing so.
Is there any way to get around this problem?

Help here will be greatly appreciated.

Thanks,
Bankim.

PS: I've tried using the ioctl mentioned above after copying the
necessary macros from kernel headers but ioctl returns error
"Inappropriate ioctl for this device" on my Ubuntu 7.04 system.
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux