[PATCH weston 11/21] libweston: ensure backend is not loaded twice
Pekka Paalanen
ppaalanen at gmail.com
Fri Sep 22 14:31:19 UTC 2017
From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
Check and ensure that a compositor can only load one backend
successfully. If a backend fails to load, it is theoretically possible
to try another backend. Once loading succeeds, only destroying the
compositor would allow "unloading" a backend.
If backend init fail, ensure the backend pointer remains NULL to avoid
calling into a half-loaded backend on e.g. compositor destruction.
Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
---
libweston/compositor.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/libweston/compositor.c b/libweston/compositor.c
index baa8a751..404922ca 100644
--- a/libweston/compositor.c
+++ b/libweston/compositor.c
@@ -5654,6 +5654,11 @@ weston_compositor_load_backend(struct weston_compositor *compositor,
int (*backend_init)(struct weston_compositor *c,
struct weston_backend_config *config_base);
+ if (compositor->backend) {
+ weston_log("Error: attempt to load a backend when one is already loaded\n");
+ return -1;
+ }
+
if (backend >= ARRAY_LENGTH(backend_map))
return -1;
@@ -5661,7 +5666,12 @@ weston_compositor_load_backend(struct weston_compositor *compositor,
if (!backend_init)
return -1;
- return backend_init(compositor, config_base);
+ if (backend_init(compositor, config_base) < 0) {
+ compositor->backend = NULL;
+ return -1;
+ }
+
+ return 0;
}
WL_EXPORT int
--
2.13.5
More information about the wayland-devel
mailing list