To avoid memory corruption or leak I store a copy of the device file name in the fbdev-backend structure.
Signed-off-by: Benoit Gschwind <[email protected]> --- src/compositor-fbdev.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/compositor-fbdev.c b/src/compositor-fbdev.c index d0597a6..619f969 100644 --- a/src/compositor-fbdev.c +++ b/src/compositor-fbdev.c @@ -59,6 +59,7 @@ struct fbdev_backend { struct udev *udev; struct udev_input input; int use_pixman; + char *device; struct wl_listener session_listener; }; @@ -448,8 +449,7 @@ static void fbdev_output_destroy(struct weston_output *base); static void fbdev_output_disable(struct weston_output *base); static int -fbdev_output_create(struct fbdev_backend *backend, - const char *device) +fbdev_output_create(struct fbdev_backend *backend) { struct fbdev_output *output; struct weston_config_section *section; @@ -465,10 +465,11 @@ fbdev_output_create(struct fbdev_backend *backend, return -1; output->backend = backend; - output->device = device; + output->device = backend->device; /* Create the frame buffer. */ - fb_fd = fbdev_frame_buffer_open(output, device, &output->fb_info); + fb_fd = fbdev_frame_buffer_open(output, backend->device, + &output->fb_info); if (fb_fd < 0) { weston_log("Creating frame buffer failed.\n"); goto out_free; @@ -602,7 +603,6 @@ fbdev_output_reenable(struct fbdev_backend *backend, struct fbdev_output *output = to_fbdev_output(base); struct fbdev_screeninfo new_screen_info; int fb_fd; - const char *device; weston_log("Re-enabling fbdev output.\n"); @@ -629,9 +629,8 @@ fbdev_output_reenable(struct fbdev_backend *backend, /* Remove and re-add the output so that resources depending on * the frame buffer X/Y resolution (such as the shadow buffer) * are re-initialised. */ - device = output->device; fbdev_output_destroy(base); - fbdev_output_create(backend, device); + fbdev_output_create(backend); return 0; } @@ -684,6 +683,7 @@ fbdev_backend_destroy(struct weston_compositor *base) /* Chain up. */ weston_launcher_destroy(base->launcher); + free(backend->device); free(backend); } @@ -778,6 +778,7 @@ fbdev_backend_create(struct weston_compositor *compositor, int *argc, char *argv backend->prev_state = WESTON_COMPOSITOR_ACTIVE; backend->use_pixman = !param->use_gl; + backend->device = strdup(param->device); weston_setup_vt_switch_bindings(compositor); @@ -801,7 +802,7 @@ fbdev_backend_create(struct weston_compositor *compositor, int *argc, char *argv } } - if (fbdev_output_create(backend, param->device) < 0) + if (fbdev_output_create(backend) < 0) goto out_launcher; udev_input_init(&backend->input, compositor, backend->udev, seat_id); -- 2.7.3 _______________________________________________ wayland-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/wayland-devel
