summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPekka Paalanen <pekka.paalanen@collabora.co.uk>2017-08-30 11:29:49 +0300
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>2017-10-04 16:18:06 +0300
commit7da9a3802fc969af67f5dd00382af47aa6f34be9 (patch)
tree156d3c1c675e7b61d30629604d982849a9fac8dc
parentd7e351189e160470fc51900eabcdec0943291da1 (diff)
libweston: set backend pointer earlier
Change all backends to set the core backend pointer early. This is necessary for libweston core to be able to access the backend vfuncs before the backend init function returns. Particularly, weston_output_init() will be needing to inspect the backend vfuncs to see if the backend has been converted to a new API. Backends that create outputs as part of their init would fail without setting the pointer earlier. For consistency, all backends are modified instead of just those that could hit an issue. Libweston core will take care of resetting the backend pointer to NULL in case of error since "libweston: ensure backend is not loaded twice". Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Ian Ray <ian.ray@ge.com> Acked-by Daniel Stone <daniels@collabora.com>
-rw-r--r--libweston/compositor-drm.c4
-rw-r--r--libweston/compositor-fbdev.c2
-rw-r--r--libweston/compositor-headless.c4
-rw-r--r--libweston/compositor-rdp.c4
-rw-r--r--libweston/compositor-wayland.c3
-rw-r--r--libweston/compositor-x11.c4
6 files changed, 11 insertions, 10 deletions
diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
index 6aca10c3..dc907818 100644
--- a/libweston/compositor-drm.c
+++ b/libweston/compositor-drm.c
@@ -4025,6 +4025,8 @@ drm_backend_create(struct weston_compositor *compositor,
b->use_pixman = config->use_pixman;
b->pageflip_timeout = config->pageflip_timeout;
+ compositor->backend = &b->base;
+
if (parse_gbm_format(config->gbm_format, GBM_FORMAT_XRGB8888, &b->gbm_format) < 0)
goto err_compositor;
@@ -4141,8 +4143,6 @@ drm_backend_create(struct weston_compositor *compositor,
"support failed.\n");
}
- compositor->backend = &b->base;
-
ret = weston_plugin_api_register(compositor, WESTON_DRM_OUTPUT_API_NAME,
&api, sizeof(api));
diff --git a/libweston/compositor-fbdev.c b/libweston/compositor-fbdev.c
index 1765fa8f..992eadb8 100644
--- a/libweston/compositor-fbdev.c
+++ b/libweston/compositor-fbdev.c
@@ -731,6 +731,7 @@ fbdev_backend_create(struct weston_compositor *compositor,
return NULL;
backend->compositor = compositor;
+ compositor->backend = &backend->base;
if (weston_compositor_set_presentation_clock_software(
compositor) < 0)
goto out_compositor;
@@ -769,7 +770,6 @@ fbdev_backend_create(struct weston_compositor *compositor,
udev_input_init(&backend->input, compositor, backend->udev,
seat_id, param->configure_device);
- compositor->backend = &backend->base;
return backend;
out_launcher:
diff --git a/libweston/compositor-headless.c b/libweston/compositor-headless.c
index 64fe6f3f..2f01b64a 100644
--- a/libweston/compositor-headless.c
+++ b/libweston/compositor-headless.c
@@ -277,6 +277,8 @@ headless_backend_create(struct weston_compositor *compositor,
return NULL;
b->compositor = compositor;
+ compositor->backend = &b->base;
+
if (weston_compositor_set_presentation_clock_software(compositor) < 0)
goto err_free;
@@ -291,8 +293,6 @@ headless_backend_create(struct weston_compositor *compositor,
if (!b->use_pixman && noop_renderer_init(compositor) < 0)
goto err_input;
- compositor->backend = &b->base;
-
ret = weston_plugin_api_register(compositor, WESTON_WINDOWED_OUTPUT_API_NAME,
&api, sizeof(api));
diff --git a/libweston/compositor-rdp.c b/libweston/compositor-rdp.c
index 393c1185..990ddc66 100644
--- a/libweston/compositor-rdp.c
+++ b/libweston/compositor-rdp.c
@@ -1299,6 +1299,8 @@ rdp_backend_create(struct weston_compositor *compositor,
b->rdp_key = config->rdp_key ? strdup(config->rdp_key) : NULL;
b->no_clients_resize = config->no_clients_resize;
+ compositor->backend = &b->base;
+
/* activate TLS only if certificate/key are available */
if (config->server_cert && config->server_key) {
weston_log("TLS support activated\n");
@@ -1345,8 +1347,6 @@ rdp_backend_create(struct weston_compositor *compositor,
goto err_output;
}
- compositor->backend = &b->base;
-
ret = weston_plugin_api_register(compositor, WESTON_RDP_OUTPUT_API_NAME,
&api, sizeof(api));
diff --git a/libweston/compositor-wayland.c b/libweston/compositor-wayland.c
index 26cfdd59..fc929364 100644
--- a/libweston/compositor-wayland.c
+++ b/libweston/compositor-wayland.c
@@ -2487,6 +2487,8 @@ wayland_backend_create(struct weston_compositor *compositor,
return NULL;
b->compositor = compositor;
+ compositor->backend = &b->base;
+
if (weston_compositor_set_presentation_clock_software(compositor) < 0)
goto err_compositor;
@@ -2559,7 +2561,6 @@ wayland_backend_create(struct weston_compositor *compositor,
"support failed.\n");
}
- compositor->backend = &b->base;
return b;
err_display:
wl_display_disconnect(b->parent.wl_display);
diff --git a/libweston/compositor-x11.c b/libweston/compositor-x11.c
index 070f2875..60843ac1 100644
--- a/libweston/compositor-x11.c
+++ b/libweston/compositor-x11.c
@@ -1669,6 +1669,8 @@ x11_backend_create(struct weston_compositor *compositor,
b->fullscreen = config->fullscreen;
b->no_input = config->no_input;
+ compositor->backend = &b->base;
+
if (weston_compositor_set_presentation_clock_software(compositor) < 0)
goto err_free;
@@ -1728,8 +1730,6 @@ x11_backend_create(struct weston_compositor *compositor,
"support failed.\n");
}
- compositor->backend = &b->base;
-
ret = weston_plugin_api_register(compositor, WESTON_WINDOWED_OUTPUT_API_NAME,
&api, sizeof(api));