From 0ca59bf85a13b8dc5b516d311df9c37e43566c1f Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Sun, 12 Jun 2016 18:55:34 +0100 Subject: [PATCH] gdk: Unset the DrawingContext <-> cairo_t link on dispose When disposing a GdkDrawingContext we should unset the association between the instance and the Cairo context; this avoids stale pointers in case a reference that has acquired on the Cairo context survives the lifetime of the GdkDrawingContext. --- gdk/gdkdrawingcontext.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gdk/gdkdrawingcontext.c b/gdk/gdkdrawingcontext.c index c082a155cc..2bf4210495 100644 --- a/gdk/gdkdrawingcontext.c +++ b/gdk/gdkdrawingcontext.c @@ -64,6 +64,12 @@ gdk_drawing_context_dispose (GObject *gobject) { GdkDrawingContext *self = GDK_DRAWING_CONTEXT (gobject); + /* Unset the drawing context, in case somebody is holding + * onto the Cairo context + */ + if (self->cr != NULL) + gdk_cairo_set_drawing_context (self->cr, NULL); + g_clear_object (&self->window); g_clear_pointer (&self->clip, cairo_region_destroy); g_clear_pointer (&self->cr, cairo_destroy);