In resolve_sync function in gthreadedresolver.c, if g_thread_pool_push
fails due to thread creation failure, we are just simply appending the
data to the queue of work to do. After the failure, we might wait
indefinitely in g_cond_wait. In case of g_thread_pool_push failure,
propagate the error so that this function does not blocks forever in
case of failure.
https://bugzilla.gnome.org/show_bug.cgi?id=651034
}
req->cond = g_cond_new ();
- g_thread_pool_push (gtr->thread_pool, req, NULL);
- g_cond_wait (req->cond, req->mutex);
+ g_thread_pool_push (gtr->thread_pool, req, &req->error);
+ if (!req->error)
+ g_cond_wait (req->cond, req->mutex);
g_mutex_unlock (req->mutex);
if (req->error)