diff options
Diffstat (limited to 'source/blender/editors/space_file/filelist.c')
-rw-r--r-- | source/blender/editors/space_file/filelist.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c index a4fe7952c36..0d1aff09e9c 100644 --- a/source/blender/editors/space_file/filelist.c +++ b/source/blender/editors/space_file/filelist.c @@ -250,6 +250,7 @@ typedef struct FileListEntryCache { GHash *uuids; /* Previews handling. */ + TaskScheduler *previews_scheduler; TaskPool *previews_pool; ThreadQueue *previews_todo; ThreadQueue *previews_done; @@ -1100,10 +1101,11 @@ static void filelist_cache_previewf(TaskPool *pool, void *taskdata, int UNUSED(t static void filelist_cache_preview_ensure_running(FileListEntryCache *cache) { if (!cache->previews_pool) { - TaskScheduler *scheduler = BLI_task_scheduler_get(); + TaskScheduler *scheduler; TaskPool *pool; - int num_tasks = max_ii(2, BLI_system_thread_count() / 2); + int num_tasks = max_ii(1, (BLI_system_thread_count() / 2) + 1); + scheduler = cache->previews_scheduler = BLI_task_scheduler_create(num_tasks + 1); pool = cache->previews_pool = BLI_task_pool_create(scheduler, NULL); cache->previews_todo = BLI_thread_queue_init(); cache->previews_done = BLI_thread_queue_init(); @@ -1150,6 +1152,8 @@ static void filelist_cache_previews_free(FileListEntryCache *cache, const bool s BLI_thread_queue_free(cache->previews_done); BLI_thread_queue_free(cache->previews_todo); BLI_task_pool_free(cache->previews_pool); + BLI_task_scheduler_free(cache->previews_scheduler); + cache->previews_scheduler = NULL; cache->previews_pool = NULL; cache->previews_todo = NULL; cache->previews_done = NULL; |