diff -Naurd ../gtk+-2.24.13/gdk/win32/gdkpixmap-win32.c ./gdk/win32/gdkpixmap-win32.c
--- ../gtk+-2.24.13/gdk/win32/gdkpixmap-win32.c	2011-12-07 17:44:57.000000000 +0000
+++ ./gdk/win32/gdkpixmap-win32.c	2012-10-22 14:31:42.036801916 +0100
@@ -104,17 +104,25 @@
 static void
 gdk_pixmap_impl_win32_finalize (GObject *object)
 {
-  GdkPixmapImplWin32 *impl = GDK_PIXMAP_IMPL_WIN32 (object);
-  GdkPixmap *wrapper = GDK_PIXMAP (GDK_DRAWABLE_IMPL_WIN32 (impl)->wrapper);
+  GdkPixmapImplWin32 *pixmap_impl = GDK_PIXMAP_IMPL_WIN32 (object);
+  GdkDrawableImplWin32 *drawable_impl = GDK_DRAWABLE_IMPL_WIN32 (pixmap_impl);
+  GdkPixmap *wrapper = GDK_PIXMAP (drawable_impl->wrapper);
 
   GDK_NOTE (PIXMAP, g_print ("gdk_pixmap_impl_win32_finalize: %p\n",
 			     GDK_PIXMAP_HBITMAP (wrapper)));
 
-  if (!impl->is_foreign)
-    GDK_DRAWABLE_IMPL_WIN32 (impl)->hdc_count--;
+  if (!pixmap_impl->is_foreign)
+    drawable_impl->hdc_count--;
 
   _gdk_win32_drawable_finish (GDK_DRAWABLE (object));
 
+  if (!pixmap_impl->is_foreign)
+    {
+      /* Drop our reference */
+      cairo_surface_destroy (drawable_impl->cairo_surface);
+      drawable_impl->cairo_surface = NULL;
+    }
+
   gdk_win32_handle_table_remove (GDK_PIXMAP_HBITMAP (wrapper));
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
