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>
diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
index 6aca10c..dc90781 100644
--- a/libweston/compositor-drm.c
+++ b/libweston/compositor-drm.c
@@ -4025,6 +4025,8 @@
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 @@
"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 1765fa8..992eadb 100644
--- a/libweston/compositor-fbdev.c
+++ b/libweston/compositor-fbdev.c
@@ -731,6 +731,7 @@
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 @@
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 64fe6f3..2f01b64 100644
--- a/libweston/compositor-headless.c
+++ b/libweston/compositor-headless.c
@@ -277,6 +277,8 @@
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 @@
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 393c118..990ddc6 100644
--- a/libweston/compositor-rdp.c
+++ b/libweston/compositor-rdp.c
@@ -1299,6 +1299,8 @@
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 @@
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 26cfdd5..fc92936 100644
--- a/libweston/compositor-wayland.c
+++ b/libweston/compositor-wayland.c
@@ -2487,6 +2487,8 @@
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 @@
"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 070f287..60843ac 100644
--- a/libweston/compositor-x11.c
+++ b/libweston/compositor-x11.c
@@ -1669,6 +1669,8 @@
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 @@
"support failed.\n");
}
- compositor->backend = &b->base;
-
ret = weston_plugin_api_register(compositor, WESTON_WINDOWED_OUTPUT_API_NAME,
&api, sizeof(api));