From 9efdd09578f1aa2c3e860d7d57022f64ab9c3fb5 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Mon, 29 Oct 2012 17:41:19 +0000 Subject: Bugfix #33004 Screencast recording stopped on a undo/redo. This was because all thread jobs were killed then. Now it leaves screen jobs (screen cast) running, that's data that doesn't change on undos. Also renamed jobs_stop_all() to jobs_kill_all() - it terminates threads. --- source/blender/windowmanager/intern/wm_jobs.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'source/blender/windowmanager/intern/wm_jobs.c') diff --git a/source/blender/windowmanager/intern/wm_jobs.c b/source/blender/windowmanager/intern/wm_jobs.c index 0917d766051..42d721327b6 100644 --- a/source/blender/windowmanager/intern/wm_jobs.c +++ b/source/blender/windowmanager/intern/wm_jobs.c @@ -360,7 +360,7 @@ void WM_jobs_start(wmWindowManager *wm, wmJob *wm_job) } } -/* stop job, free data completely */ +/* stop job, end thread, free data completely */ static void wm_jobs_kill_job(wmWindowManager *wm, wmJob *wm_job) { if (wm_job->running) { @@ -385,7 +385,8 @@ static void wm_jobs_kill_job(wmWindowManager *wm, wmJob *wm_job) } -void WM_jobs_stop_all(wmWindowManager *wm) +/* wait until every job ended */ +void WM_jobs_kill_all(wmWindowManager *wm) { wmJob *wm_job; @@ -394,6 +395,18 @@ void WM_jobs_stop_all(wmWindowManager *wm) } +/* wait until every job ended, except for one owner (used in undo to keep screen job alive) */ +void WM_jobs_kill_all_except(wmWindowManager *wm, void *owner) +{ + wmJob *wm_job; + + for (wm_job = wm->jobs.first; wm_job; wm_job = wm_job->next) { + if (wm_job->owner != owner) + wm_jobs_kill_job(wm, wm_job); + } +} + + /* signal job(s) from this owner or callback to stop, timer is required to get handled */ void WM_jobs_stop(wmWindowManager *wm, void *owner, void *startjob) { -- cgit v1.2.3