changeset 1026:8acc100d5527

fixed error handling in image loader
author nadvornik
date Sun, 31 Aug 2008 21:02:09 +0000
parents 448d174454e1
children b0db0bd74dba
files src/image-load.c
diffstat 1 files changed, 15 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/image-load.c	Sun Aug 31 18:53:11 2008 +0000
+++ b/src/image-load.c	Sun Aug 31 21:02:09 2008 +0000
@@ -87,6 +87,8 @@
 	il->requested_height = 0;
 	il->shrunk = FALSE;
 
+	il->can_destroy = TRUE;
+
 #ifdef HAVE_GTHREAD
 	il->data_mutex = g_mutex_new();
 	il->can_destroy_cond = g_cond_new();
@@ -124,8 +126,7 @@
 			     G_STRUCT_OFFSET(ImageLoaderClass, error),
 			     NULL, NULL,
 			     g_cclosure_marshal_VOID__VOID,
-			     G_TYPE_NONE, 1,
-			     GDK_TYPE_EVENT);
+			     G_TYPE_NONE, 0);
 
 	signals[SIGNAL_DONE] =
 		g_signal_new("done",
@@ -705,6 +706,16 @@
 	ImageLoader *il = data;
 	gint cont = image_loader_begin(il);
 	
+	if (!cont && !image_loader_get_pixbuf(il))
+		{
+		/* 
+		loader failed, we have to send signal 
+		(idle mode returns the image_loader_begin return value directly)
+		(success is always reported indirectly from image_loader_begin)
+		*/
+		image_loader_emit_error(il);
+		}
+	
 	while (cont && !image_loader_get_is_done(il) && !image_loader_get_stopping(il))
 		{
 		cont = image_loader_continue(il);
@@ -734,6 +745,8 @@
 		image_loader_thread_pool = g_thread_pool_new(image_loader_thread_run, NULL, -1, FALSE, NULL);
 		}
 
+	il->can_destroy = FALSE; /* ImageLoader can't be freed until image_loader_thread_run finishes */
+
 	g_thread_pool_push(image_loader_thread_pool, il, NULL);
 	DEBUG_1("Thread pool num threads: %d", g_thread_pool_get_num_threads(image_loader_thread_pool));