From f1acd7726ca314c20566a0a436786dc5f3f94f3c Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 18 Aug 2005 10:42:22 +0000 Subject: [PATCH] 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). --- src/pcm/pcm_direct.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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); -- 2.47.3