Got it working.

This commit is contained in:
Scott Anderson 2017-05-14 12:31:22 +12:00
parent 058b8bdf27
commit ce8786721b
2 changed files with 5 additions and 13 deletions

View File

@ -47,12 +47,13 @@ static void device_paused(struct wl_listener *listener, void *data) {
}
static void device_resumed(struct wl_listener *listener, void *data) {
struct wlr_backend_state *drm = wl_container_of(listener, drm, device_paused);
struct wlr_backend_state *drm = wl_container_of(listener, drm, device_resumed);
int *new_fd = data;
close(drm->fd);
drm->fd = *new_fd;
drm->renderer.fd = *new_fd;
if (dup2(*new_fd, drm->fd) < 0) {
wlr_log(L_ERROR, "dup2 failed: %s", strerror(errno));
return;
}
for (size_t i = 0; i < drm->outputs->length; ++i) {
struct wlr_output_state *output = drm->outputs->items[i];

View File

@ -226,15 +226,6 @@ static int resume_device(sd_bus_message *msg, void *userdata, sd_bus_error *ret_
goto error;
}
// The original fd seem to be closed when the message is freed
// so we just clone it.
fd = fcntl(fd, F_DUPFD_CLOEXEC, 0);
if (fd == -1) {
wlr_log(L_ERROR, "Failed to clone file descriptor for ResumeDevice: %s",
strerror(errno));
goto error;
}
// TODO: Use major/minor to make sure the right devices are getting signals
wl_signal_emit(&session->base.device_resumed, &fd);