diff options
-rw-r--r-- | gdk-pixbuf/ChangeLog | 5 | ||||
-rw-r--r-- | gdk-pixbuf/gdk-pixbuf-loader.c | 28 |
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; } /** |