From 5486b8c74d9b853cd74229689dc67800cd722c65 Mon Sep 17 00:00:00 2001 From: Moises Silva <moy@sangoma.com> Date: Tue, 16 Nov 2010 23:41:11 -0500 Subject: [PATCH] freetdm: retry polling in DAHDI devices when fails due to interrupted system call --- libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c b/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c index ddf7b3ffab..b135e61269 100644 --- a/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c +++ b/libs/freetdm/src/ftmod/ftmod_zt/ftmod_zt.c @@ -889,13 +889,18 @@ static FIO_WAIT_FUNCTION(zt_wait) inflags |= POLLPRI; } - +pollagain: memset(&pfds[0], 0, sizeof(pfds[0])); pfds[0].fd = ftdmchan->sockfd; pfds[0].events = inflags; result = poll(pfds, 1, to); *flags = 0; + if (rc < 0 && errno == EINTR) { + ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "DAHDI wait got interrupted, trying again\n"); + goto pollagain; + } + if (pfds[0].revents & POLLERR) { ftdm_log_chan_msg(ftdmchan, FTDM_LOG_ERROR, "DAHDI device got POLLERR\n"); result = -1;