Dear Jaroslav Kysela.

I wrote some example which illustrates problem described in previous message. 
Also I want you to make some fixes in your library which can avoid this 
problem. First of all I discommented lines 325-326 in file pcm_direct.c 
(because even after application stopped server still process and device 
/dev/snd/pcmC0D0p locked). After that I added one line, which unlink 
temporary file /tmp/alsa-dmix*.

//----------- example ------------------------------
#include <alsa/asoundlib.h>
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>

void *thread_routine( void *param ) {
  snd_pcm_t *pcm;
  int err;

  printf( "%d: start\n", getpid() );

  err = snd_pcm_open( &pcm,
                      "plug:dmix",
                      SND_PCM_STREAM_PLAYBACK,
                      SND_PCM_NONBLOCK );

  if( err < 0 ) {
    fprintf( stderr, "%s\n", snd_strerror(err) );
    return NULL;
  }

  snd_pcm_close( pcm );

  printf( "%d: finish\n", getpid() );
  return NULL;
}

int main( void ) {
  pthread_t thread;
  int i =0;

  printf( "main pid: %d\n", getpid() );

  for( i=0; i<2; ++i ) {
    if( pthread_create( &thread, 0, thread_routine, NULL ) ) {
      fprintf( stderr, "pthread_create failure\n" );
      exit( -1 );
    }
    pthread_join( thread, 0 );
  }

  return 0;
}

//----------- patch ------------------------------

--- pcm_direct.c.orig   2003-07-15 13:48:56.000000000 +0400
+++ pcm_direct.c        2003-07-15 13:50:37.000000000 +0400
@@ -322,13 +322,14 @@
 int snd_pcm_direct_server_discard(snd_pcm_direct_t *dmix)
 {
        if (dmix->server) {
-               //kill(dmix->server_pid, SIGTERM);
-               //waitpid(dmix->server_pid, NULL, 0);
+               kill(dmix->server_pid, SIGTERM);
+               waitpid(dmix->server_pid, NULL, 0);
                dmix->server_pid = (pid_t)-1;
        }
        if (dmix->server_fd > 0) {
                close(dmix->server_fd);
                dmix->server_fd = -1;
+    unlink( dmix->shmptr->socket_name );
        }
        dmix->server = 0;
        return 0;

-- 
Cheers, Konstantin Stepaniuk



-------------------------------------------------------
This SF.Net email sponsored by: Parasoft
Error proof Web apps, automate testing & more.
Download & eval WebKing and get a free book.
www.parasoft.com/bulletproofapps1
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel

Reply via email to