Mercurial > geeqie
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));