Handle device disconnects
This commit is contained in:
parent
d2c1ffd909
commit
b6b82db8e4
23
hw/links.c
23
hw/links.c
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user