[PATCH} fixing memory leak with cairo_win32_device (Bug 67171)

Fred Beca <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <CAKTSDKYwBV+N6fau5+4aVB9jbuZL9v59aoK=rW__qayrMboDQg@mail.gmail.com>
Hi,

There have been a memory leak on win32 platform for a while because of the
static __cairo_win32_device object that is never released (see
https://bugs.freedesktop.org/show_bug.cgi?id=67171)

Please find attached a simple patch that fixes the problem by adding a
win32-specific cleanup call in the cairo_debug_reset_static_data function.
I hope it can be added to the official release to remove the leak.

Regards,

Fred

Index: cairo-debug.c
===================================================================
--- cairo-debug.c (cairo-1.14.6)
+++ cairo-debug.c (working copy)
@@ -89,7 +89,9 @@
 #if CAIRO_HAS_DRM_SURFACE
     _cairo_drm_device_reset_static_data ();
 #endif
-
+#if CAIRO_HAS_WIN32_SURFACE
+    _cairo_win32_device_reset_static_data ();
+#endif
     _cairo_default_context_reset_static_data ();

 #if CAIRO_HAS_COGL_SURFACE
Index: cairoint.h
===================================================================
--- cairoint.h (cairo-1.14.6)
+++ cairoint.h (working copy)
@@ -442,6 +442,11 @@
 cairo_private void
 _cairo_win32_font_reset_static_data (void);

+#if CAIRO_HAS_WIN32_SURFACE
+cairo_private void
+_cairo_win32_device_reset_static_data (void);
+#endif
+
 #if CAIRO_HAS_COGL_SURFACE
 void
 _cairo_cogl_context_reset_static_data (void);
Index: win32/cairo-win32-device.c
===================================================================
--- win32/cairo-win32-device.c (cairo-1.14.6)
+++ win32/cairo-win32-device.c (working copy)
@@ -187,3 +187,12 @@

     return flags;
 }
+
+void _cairo_win32_device_reset_static_data (void)
+{
+     if (__cairo_win32_device != NULL) {
+ cairo_device_t *device = __cairo_win32_device;
+ __cairo_win32_device = NULL;
+ cairo_device_destroy (device);
+    }
+}

-- 
cairo mailing list
[email protected]
https://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.