diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c
index fad7ff4..c8c4e74 100644
--- a/gtk/gtkicontheme.c
+++ b/gtk/gtkicontheme.c
@@ -3873,7 +3873,16 @@ gtk_icon_info_load_icon (GtkIconInfo *icon_info,
   if (!icon_info_ensure_scale_and_pixbuf (icon_info, FALSE))
     {
       if (icon_info->load_error)
-        g_propagate_error (error, icon_info->load_error);
+        {
+          /* g_propagate_error frees the second parameter if
+             the first is NULL. Since we already free load_error
+             in the finalizer, we should only call propagate error
+             if the caller expects to receive the error.
+             OTOH, if we were to free load_error now, it would not
+             be possible for the caller to request the error later. */ 
+          if (error)
+            g_propagate_error (error, icon_info->load_error);
+        }
       else
         g_set_error_literal (error,  
                              GTK_ICON_THEME_ERROR,  
