mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2026-05-06 04:28:24 +02:00
compositor-fbdev: make copy of the device string
Ensuring that the pointer to the device path stays valid gets harder and harder with migrating to the libweston-style config handling. Therefore, make a copy of the string, private to struct fbdev_output. Now the pointer passed in to fbdev_output_create() could be freed right after the call returns. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Quentin Glidic <sardemff7+git@sardemff7.net> Reviewed-by: Benoit Gschwind <gschwind@gnu-log.net>
This commit is contained in:
parent
c06389a105
commit
e5b5659240
1 changed files with 8 additions and 5 deletions
|
|
@ -84,7 +84,7 @@ struct fbdev_output {
|
|||
struct wl_event_source *finish_frame_timer;
|
||||
|
||||
/* Frame buffer details. */
|
||||
const char *device; /* ownership shared with fbdev_parameters */
|
||||
char *device;
|
||||
struct fbdev_screeninfo fb_info;
|
||||
void *fb; /* length is fb_info.buffer_length */
|
||||
|
||||
|
|
@ -470,7 +470,7 @@ fbdev_output_create(struct fbdev_backend *backend,
|
|||
return -1;
|
||||
|
||||
output->backend = backend;
|
||||
output->device = device;
|
||||
output->device = strdup(device);
|
||||
|
||||
/* Create the frame buffer. */
|
||||
fb_fd = fbdev_frame_buffer_open(output, device, &output->fb_info);
|
||||
|
|
@ -554,6 +554,7 @@ out_hw_surface:
|
|||
weston_output_destroy(&output->base);
|
||||
fbdev_frame_buffer_destroy(output);
|
||||
out_free:
|
||||
free(output->device);
|
||||
free(output);
|
||||
|
||||
return -1;
|
||||
|
|
@ -580,6 +581,7 @@ fbdev_output_destroy(struct weston_output *base)
|
|||
/* Remove the output. */
|
||||
weston_output_destroy(&output->base);
|
||||
|
||||
free(output->device);
|
||||
free(output);
|
||||
}
|
||||
|
||||
|
|
@ -607,7 +609,7 @@ 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;
|
||||
char *device;
|
||||
|
||||
weston_log("Re-enabling fbdev output.\n");
|
||||
|
||||
|
|
@ -634,9 +636,10 @@ 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);
|
||||
device = strdup(output->device);
|
||||
fbdev_output_destroy(&output->base);
|
||||
fbdev_output_create(backend, device);
|
||||
free(device);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue