summaryrefslogtreecommitdiff
path: root/gdk-pixbuf/gdk-pixbuf-animation.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2004-11-12 05:34:31 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2004-11-12 05:34:31 +0000
commitcb918cdb02c1c1fed54a86776a0888e236d2e198 (patch)
treea606b43b376cd1eeb9d3586634f20493d2b84635 /gdk-pixbuf/gdk-pixbuf-animation.c
parent26cbda1b88e5e57533468cde10d51cd5baeeb871 (diff)
downloadgtk+-cb918cdb02c1c1fed54a86776a0888e236d2e198.tar.gz
Changes to make gdk-pixbuf threadsafe (#157310, #157306, Colin Walters):
2004-11-12 Matthias Clasen <mclasen@redhat.com> Changes to make gdk-pixbuf threadsafe (#157310, #157306, Colin Walters): * gdk-pixbuf-io.h (enum GdkPixbufFormatFlags): Add GDK_PIXBUF_FORMAT_THREADSAFE to indicate that an image loader is threadsafe. * gdk-pixbuf-io.c (get_file_formats, _gdk_pixbuf_load_module): Use a lock to make initialization of global data structures threadsafe. * gdk-pixbuf-private.h: * gdk-pixbuf-io.c (_gdk_pixbuf_lock, _gdk_pixbuf_unlock): Auxiliary functions which use another lock to protect threadunsafe image loaders. * gdk-pixbuf-io.c (gdk_pixbuf_real_save): (save_to_callback_with_tmp_file): (gdk_pixbuf_real_save_to_callback): (gdk_pixbuf_new_from_xpm_data): (_gdk_pixbuf_generic_image_load): * gdk-pixbuf-animation.c (gdk_pixbuf_animation_new_from_file): * gdk-pixbuf-loader.c (gdk_pixbuf_loader_load_module): (gdk_pixbuf_loader_close): (gdk_pixbuf_loader_finalize): Use _gdk_pixbuf_lock() and _gdk_pixbuf_unlock(). * io-ani.c, io-bmp.c, io-gif.c, io-ico.c: * io-jpeg.c, io-pcx.c, io-png.c, io-pnm.c: * io-ras.c, io-tga.c, io-wbmp.c, io-xbm.c: * io-xpm.c: Mark as threadsafe. * io-tiff.c: Remove pointless locking, mark as threadunsafe.
Diffstat (limited to 'gdk-pixbuf/gdk-pixbuf-animation.c')
-rw-r--r--gdk-pixbuf/gdk-pixbuf-animation.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gdk-pixbuf/gdk-pixbuf-animation.c b/gdk-pixbuf/gdk-pixbuf-animation.c
index 5ea1ef6ee6..fa6968c153 100644
--- a/gdk-pixbuf/gdk-pixbuf-animation.c
+++ b/gdk-pixbuf/gdk-pixbuf-animation.c
@@ -181,6 +181,8 @@ gdk_pixbuf_animation_new_from_file (const char *filename,
return NULL;
}
+ _gdk_pixbuf_lock (image_module);
+
if (image_module->load_animation == NULL) {
GdkPixbuf *pixbuf;
@@ -208,7 +210,8 @@ gdk_pixbuf_animation_new_from_file (const char *filename,
if (pixbuf == NULL) {
g_free (display_name);
- return NULL;
+ animation = NULL;
+ goto out_unlock;
}
animation = gdk_pixbuf_non_anim_new (pixbuf);
@@ -241,6 +244,8 @@ gdk_pixbuf_animation_new_from_file (const char *filename,
g_free (display_name);
+ out_unlock:
+ _gdk_pixbuf_unlock (image_module);
return animation;
}