From 52e521a7c182266694b0a311103c4758a541d2e4 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Wed, 17 Aug 2011 15:48:07 +1000 Subject: [PATCH] Revert "Copy the work before returning from creating a thread in case we change the work before copying it." This reverts commit 6bf4d781e9d9620779d3fb924037941929e738c9. Causing a double free error. --- main.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/main.c b/main.c index 7f1165ac..e31718b8 100644 --- a/main.c +++ b/main.c @@ -3088,7 +3088,7 @@ out: return ret; } -static bool submit_work_sync(struct thr_info *thr, struct work *work_in) +static bool submit_work_sync(struct thr_info *thr, const struct work *work_in) { struct workio_cmd *wc; @@ -3099,9 +3099,10 @@ static bool submit_work_sync(struct thr_info *thr, struct work *work_in) return false; } - wc->u.work = work_in; + wc->u.work = make_work(); wc->cmd = WC_SUBMIT_WORK; wc->thr = thr; + memcpy(wc->u.work, work_in, sizeof(*work_in)); if (opt_debug) applog(LOG_DEBUG, "Pushing submit work to work thread"); @@ -3120,7 +3121,7 @@ err_out: struct swa { struct thr_info *thr; - struct work *work_in; + const struct work *work_in; }; static void *swasync_thread(void *userdata) @@ -3145,8 +3146,7 @@ static bool submit_work_async(struct thr_info *thr, const struct work *work_in) } swa->thr = thr; - swa->work_in = make_work(); - memcpy(swa->work_in, work_in, sizeof(struct work)); + swa->work_in = work_in; if (unlikely(pthread_create(&sw_thread, NULL, swasync_thread, (void *)swa))) { applog(LOG_ERR, "Failed to create swasync_thread");