[Bf-blender-cvs] [18c2a44333] master: Fix ugly mistake in BLI_task - freeing while some tasks are still being processed.

Bastien Montagne noreply at git.blender.org
Fri Mar 3 17:18:58 CET 2017


Commit: 18c2a443336dea839c028dcc98f8021b98c2a5ca
Author: Bastien Montagne
Date:   Fri Mar 3 17:12:03 2017 +0100
Branches: master
https://developer.blender.org/rB18c2a443336dea839c028dcc98f8021b98c2a5ca

Fix ugly mistake in BLI_task - freeing while some tasks are still being processed.

Freeing pool was calling `BLI_task_pool_stop()`, which only clears
pool's tasks that are in TODO queue, whithout ensuring no more tasks
from that pool are being processed in worker threads.

This could lead to use-after-free random (and seldom) crashes.

Now use instead `BLI_task_pool_cancel()`, which does waits for all tasks
being processed to finish, before returning.

===================================================================

M	source/blender/blenlib/intern/task.c

===================================================================

diff --git a/source/blender/blenlib/intern/task.c b/source/blender/blenlib/intern/task.c
index 5286e6ffb9..359360d59c 100644
--- a/source/blender/blenlib/intern/task.c
+++ b/source/blender/blenlib/intern/task.c
@@ -565,7 +565,7 @@ TaskPool *BLI_task_pool_create_background(TaskScheduler *scheduler, void *userda
 
 void BLI_task_pool_free(TaskPool *pool)
 {
-	BLI_task_pool_stop(pool);
+	BLI_task_pool_cancel(pool);
 
 	BLI_mutex_end(&pool->num_mutex);
 	BLI_condition_end(&pool->num_cond);




More information about the Bf-blender-cvs mailing list