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