if (!SetEvent(interrupt->event)) {
ftdm_log(FTDM_LOG_ERROR, "Failed to signal interrupt\n");
return FTDM_FAIL;
+
}
#else
int err;
#else
close(interrupt->readfd);
close(interrupt->writefd);
+
interrupt->readfd = -1;
interrupt->writefd = -1;
#endif
{
int numdevices = 0;
unsigned i;
+
#if defined(__WINDOWS__)
DWORD res = 0;
HANDLE ints[20];
for (i = 0; i < size; i++) {
ints[i] = interrupts[i]->event;
if (interrupts[i]->device != FTDM_INVALID_SOCKET) {
+
ints[size+numdevices] = interrupts[i]->device;
numdevices++;
}
struct pollfd ints[size*2];
memset(&ints, 0, sizeof(ints));
-
+pollagain:
for (i = 0; i < size; i++) {
ints[i].events = POLLIN;
ints[i].revents = 0;
ints[size+numdevices].events = POLLIN;
ints[size+numdevices].revents = 0;
ints[size+numdevices].fd = interrupts[i]->device;
+
numdevices++;
}
}
res = poll(ints, size + numdevices, ms);
if (res == -1) {
+ if (errno == EINTR) {
+ goto pollagain;
+ }
ftdm_log(FTDM_LOG_CRIT, "interrupt poll failed (%s)\n", strerror(errno));
return FTDM_FAIL;
}