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.
This commit is contained in:
Bastien Montagne 2017-07-19 12:55:05 +02:00
parent 5376b3eeca
commit 73adf3e27d
1 changed files with 4 additions and 1 deletions

View File

@ -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);