# HG changeset patch # User nadvornik # Date 1220216529 0 # Node ID 8acc100d55271b05e6b986f90a47cdf470f1c390 # Parent 448d174454e1b39a9a519f58675a92522ee2dcbb fixed error handling in image loader diff -r 448d174454e1 -r 8acc100d5527 src/image-load.c --- 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));