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