From: Jaroslav Kysela Date: Thu, 18 Aug 2005 10:42:22 +0000 (+0000) Subject: PCM direct plugins - handle EINTR in the resource server X-Git-Tag: v1.0.10rc1~3 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=f1acd7726ca314c20566a0a436786dc5f3f94f3c;p=alsa-lib.git PCM direct plugins - handle EINTR in the resource server 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). --- diff --git a/src/pcm/pcm_direct.c b/src/pcm/pcm_direct.c index 8ce406bd..8d70e52b 100644 --- a/src/pcm/pcm_direct.c +++ b/src/pcm/pcm_direct.c @@ -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);