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

Adrian Johnson <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
On 05/04/16 19:52, Fred Beca wrote:
> 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.

If you could add the patch to bug 67171 and I will test and commit it
next time I am working on the windows backend.

> 
> 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.