]> git.alsa-project.org Git - alsa-lib.git/commitdiff
PCM direct plugins - handle EINTR in the resource server
authorJaroslav Kysela <perex@perex.cz>
Thu, 18 Aug 2005 10:42:22 +0000 (10:42 +0000)
committerJaroslav Kysela <perex@perex.cz>
Thu, 18 Aug 2005 10:42:22 +0000 (10:42 +0000)
The poll() call in the resource server for PCM direct plugins might be
interrupted with an signal. Handle the case gracefuly and don't exit
the server (which brings another problems - cannot connect to socket -
later).

src/pcm/pcm_direct.c

index 8ce406bdea9eea33645ec72680baec1e20509d75..8d70e52b3c5c0bb9afaff12252dc78c32bfdebe7 100644 (file)
@@ -288,9 +288,13 @@ static void server_job(snd_pcm_direct_t *dmix)
        server_printf("DIRECT SERVER STARTED\n");
        while (1) {
                ret = poll(pfds, current + 1, 500);
-               server_printf("DIRECT SERVER: poll ret = %i, revents[0] = 0x%x\n", ret, pfds[0].revents);
-               if (ret < 0)    /* some error */
+               server_printf("DIRECT SERVER: poll ret = %i, revents[0] = 0x%x, errno = %i\n", ret, pfds[0].revents, errno);
+               if (ret < 0) {
+                       if (errno == EINTR)
+                               continue;
+                       /* some error */
                        break;
+               }
                if (ret == 0 || (pfds[0].revents & (POLLERR | POLLHUP))) {      /* timeout or error? */
                        struct shmid_ds buf;
                        snd_pcm_direct_semaphore_down(dmix, DIRECT_IPC_SEM_CLIENT);