[cairo] [PATCH} fixing memory leak with cairo_win32_device (Bug 67171)
Fred Beca
fredbca21 at gmail.com
Tue Apr 5 10:22:48 UTC 2016
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);
+ }
+}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cairographics.org/archives/cairo/attachments/20160405/13ada238/attachment.html>
More information about the cairo
mailing list