summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Ashton <joshua@froggi.es>2023-05-10 15:51:16 +0000
committerChristian Rauch <rauch.christian@gmx.de>2023-05-16 20:37:21 +0000
commita40348a976fd32bd1861fe51edabc749b3d1f336 (patch)
tree0f263fef22a8cc9f858c1466b29e49393673bc0b
parent0fc00cb603899efe2de42c4c8f29e27571388641 (diff)
cairo: Fix crash on destroy when globals could not be obtained
Gamescope does not advertise subcompositor so when this plugin is initialized, it fails and then attempts to destroy a NULL subcompositor which segfaults in wl_proxy code.
-rw-r--r--src/plugins/cairo/libdecor-cairo.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/plugins/cairo/libdecor-cairo.c b/src/plugins/cairo/libdecor-cairo.c
index 6113066..8d2ef14 100644
--- a/src/plugins/cairo/libdecor-cairo.c
+++ b/src/plugins/cairo/libdecor-cairo.c
@@ -398,12 +398,15 @@ libdecor_plugin_cairo_destroy(struct libdecor_plugin *plugin)
free(plugin_cairo->cursor_theme_name);
- wl_shm_destroy(plugin_cairo->wl_shm);
+ if (plugin_cairo->wl_shm)
+ wl_shm_destroy(plugin_cairo->wl_shm);
pango_font_description_free(plugin_cairo->font);
- wl_compositor_destroy(plugin_cairo->wl_compositor);
- wl_subcompositor_destroy(plugin_cairo->wl_subcompositor);
+ if (plugin_cairo->wl_compositor)
+ wl_compositor_destroy(plugin_cairo->wl_compositor);
+ if (plugin_cairo->wl_subcompositor)
+ wl_subcompositor_destroy(plugin_cairo->wl_subcompositor);
libdecor_plugin_release(&plugin_cairo->plugin);
free(plugin_cairo);