[Bf-blender-cvs] [cf881ab8162] tmp-debug-filebrowser: Fix (unreported) seldom crash when using previews in filebrowser.

Bastien Montagne noreply at git.blender.org
Wed Jul 19 16:41:37 CEST 2017


Commit: cf881ab8162353d77f65a6e9dff3fc05ee9971d4
Author: Bastien Montagne
Date:   Wed Jul 19 12:55:05 2017 +0200
Branches: tmp-debug-filebrowser
https://developer.blender.org/rBcf881ab8162353d77f65a6e9dff3fc05ee9971d4

Fix (unreported) seldom crash when using previews in filebrowser.

Hopefully fix it actually, at least could not reproduce it anymore with
that changen, but Was already quite hard to trigger before.
We need a memory barrier at this allocation, otherwise it might happen
after preview gets added to done queue, so preview could end up being
freed twice, leading to crash.

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

M	source/blender/editors/space_file/filelist.c

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

diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index 8e548d7a9bd..d94aad640b7 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -1116,7 +1116,10 @@ static void filelist_cache_preview_runf(TaskPool *__restrict pool, void *taskdat
 	preview->img = IMB_thumb_manage(preview->path, THB_LARGE, source);
 	IMB_thumb_path_unlock(preview->path);
 
-	preview->flags = 0;  /* Used to tell free func to not free anything! */
+	/* Used to tell free func to not free anything.
+	 * Note that we do not care about cas result here,
+	 * we only want value attribution itself to be atomic (and memory barier).*/
+	atomic_cas_uint32(&preview->flags, preview->flags, 0);
 	BLI_thread_queue_push(cache->previews_done, preview);
 
 //	printf("%s: End (%d)...\n", __func__, threadid);




More information about the Bf-blender-cvs mailing list