From 32ccbb213b2a2d419581690d42611c375c3d22cf Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Thu, 30 Sep 2010 12:29:08 -0400 Subject: Fix behaviour when the error handler itself calls dmnsn_error(). --- libdimension/threads.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'libdimension/threads.c') diff --git a/libdimension/threads.c b/libdimension/threads.c index 1f1acd5..2c00cc8 100644 --- a/libdimension/threads.c +++ b/libdimension/threads.c @@ -19,6 +19,7 @@ *************************************************************************/ #include "dimension-impl.h" +#include typedef struct dmnsn_thread_payload { dmnsn_thread_fn *thread_fn; @@ -29,7 +30,10 @@ typedef struct dmnsn_thread_payload { static void dmnsn_thread_cleanup(void *arg) { - dmnsn_progress *progress = arg; + dmnsn_thread_payload *payload = arg; + dmnsn_progress *progress = payload->progress; + dmnsn_free(payload); + dmnsn_done_progress(progress); } @@ -38,11 +42,11 @@ dmnsn_thread(void *arg) { dmnsn_thread_payload *payload = arg; int *ret; - pthread_cleanup_push(&dmnsn_thread_cleanup, payload->progress); + + pthread_cleanup_push(&dmnsn_thread_cleanup, payload); ret = dmnsn_malloc(sizeof(int)); *ret = (*payload->thread_fn)(payload->arg); pthread_cleanup_pop(1); - dmnsn_free(payload); return ret; } -- cgit v1.2.3