diff -Naurd ../gtk+-2.24.13/gdk/win32/gdkdrawable-win32.c ./gdk/win32/gdkdrawable-win32.c
--- ../gtk+-2.24.13/gdk/win32/gdkdrawable-win32.c	2011-11-10 13:13:19.000000000 +0000
+++ ./gdk/win32/gdkdrawable-win32.c	2012-10-22 12:20:36.404604789 +0100
@@ -2033,8 +2033,14 @@
 
   if (impl->cairo_surface)
     {
+      /* Tell outstanding owners that the surface is useless */
       cairo_surface_finish (impl->cairo_surface);
+
       cairo_surface_set_user_data (impl->cairo_surface, &gdk_win32_cairo_key, NULL, NULL);
+
+      /* Drop our reference */
+      cairo_surface_destroy (impl->cairo_surface);
+      impl->cairo_surface = NULL;
     }
 
   g_assert (impl->hdc_count == 0);
