diff --git a/gdk-pixbuf/ChangeLog b/gdk-pixbuf/ChangeLog index a4443b8441..5794fbce81 100644 --- a/gdk-pixbuf/ChangeLog +++ b/gdk-pixbuf/ChangeLog @@ -1,3 +1,8 @@ +2006-12-09 Matthias Clasen + + * gdk-pixbuf-loader.c (gdk_pixbuf_loader_write): Behave as + documented and close the loader when returning FALSE. + 2006-10-29 Tor Lillqvist * 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; } /**