Handle device disconnects

This commit is contained in:
Kamil Trzcinski 2022-04-06 12:36:53 +02:00
parent d2c1ffd909
commit b6b82db8e4

View File

@ -44,12 +44,13 @@ int _build_fds(link_t *all_links, struct pollfd *fds, link_t **links, buffer_lis
int count_enqueued = buffer_list_count_enqueued(sink);
// Can something be dequeued?
if (count_enqueued > 0) {
fds[n] = (struct pollfd){ sink->device->fd, POLLOUT };
buf_lists[n] = sink;
links[n] = NULL;
fds[n].fd = sink->device->fd;
fds[n].events = POLLHUP;
if (count_enqueued > 0)
fds[n].events |= POLLOUT;
buf_lists[n] = source;
links[n] = link;
n++;
}
// Can this chain pauses
if (!sink->device->paused && count_enqueued < sink->nbufs) {
@ -63,13 +64,14 @@ int _build_fds(link_t *all_links, struct pollfd *fds, link_t **links, buffer_lis
source->device->output_device->paused = paused;
}
if (!source->device->paused) {
fds[n] = (struct pollfd){ source->device->fd, POLLIN };
fds[n].fd = source->device->fd;
fds[n].events = POLLHUP;
if (!source->device->paused)
fds[n].events |= POLLIN;
buf_lists[n] = source;
links[n] = link;
n++;
}
}
return n;
}
@ -156,6 +158,11 @@ int links_step(link_t *all_links, int timeout)
}
}
if (fds[i].revents & POLLHUP) {
E_LOG_INFO(buf_list, "Device disconnected.");
return -1;
}
if (fds[i].revents & POLLERR) {
E_LOG_INFO(buf_list, "Got an error");
return -1;