summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdk-pixbuf/ChangeLog5
-rw-r--r--gdk-pixbuf/gdk-pixbuf-loader.c28
2 files changed, 22 insertions, 11 deletions
diff --git a/gdk-pixbuf/ChangeLog b/gdk-pixbuf/ChangeLog
index 9f6940f202..de1501f126 100644
--- a/gdk-pixbuf/ChangeLog
+++ b/gdk-pixbuf/ChangeLog
@@ -1,3 +1,8 @@
+2006-12-09 Matthias Clasen <mclasen@redhat.com>
+
+ * gdk-pixbuf-loader.c (gdk_pixbuf_loader_write): Behave as
+ documented and close the loader when returning FALSE.
+
2006-10-29 Tor Lillqvist <tml@novell.com>
* pixbufloader_*.def
diff --git a/gdk-pixbuf/gdk-pixbuf-loader.c b/gdk-pixbuf/gdk-pixbuf-loader.c
index b03f06e83e..977d8de23c 100644
--- a/gdk-pixbuf/gdk-pixbuf-loader.c
+++ b/gdk-pixbuf/gdk-pixbuf-loader.c
@@ -455,10 +455,7 @@ gdk_pixbuf_loader_write (GdkPixbufLoader *loader,
eaten = gdk_pixbuf_loader_eat_header_write (loader, buf, count, error);
if (eaten <= 0)
- {
- gdk_pixbuf_loader_ensure_error (loader, error);
- return FALSE;
- }
+ goto fail;
count -= eaten;
buf += eaten;
@@ -466,16 +463,25 @@ gdk_pixbuf_loader_write (GdkPixbufLoader *loader,
if (count > 0 && priv->image_module->load_increment)
{
- gboolean retval;
- retval = priv->image_module->load_increment (priv->context, buf, count,
- error);
- if (!retval)
- gdk_pixbuf_loader_ensure_error (loader, error);
-
- return retval;
+ if (!priv->image_module->load_increment (priv->context, buf, count,
+ error))
+ goto fail;
}
return TRUE;
+
+ fail:
+ gdk_pixbuf_loader_ensure_error (loader, error);
+
+ priv->closed = TRUE;
+
+ if (priv->image_module && priv->holds_threadlock)
+ {
+ _gdk_pixbuf_unlock (priv->image_module);
+ priv->holds_threadlock = FALSE;
+ }
+
+ return FALSE;
}
/**