Fix threading conflict with movie cache line

It was possible that a render thread will be freeing cache while the
interface is iterating over cache items to build cache line.

Found while looking into T94738. It might be a fix, but I am unable
to reproduce the original issue, so can not know for sure whether
there is something else going or or not.
This commit is contained in:
Sergey Sharybin 2022-03-11 12:32:30 +01:00
parent f6564df351
commit f4c8b4eb3e
Notes: blender-bot 2023-02-14 04:24:05 +01:00
Referenced by issue #94738, Blender crashing when geometry nodes with a large animated image sequences are used
2 changed files with 5 additions and 0 deletions

View File

@ -1609,8 +1609,10 @@ void BKE_movieclip_get_cache_segments(MovieClip *clip,
if (clip->cache) {
int proxy = rendersize_to_proxy(user, clip->flag);
BLI_thread_lock(LOCK_MOVIECLIP);
IMB_moviecache_get_cache_segments(
clip->cache->moviecache, proxy, user->render_flag, r_totseg, r_points);
BLI_thread_unlock(LOCK_MOVIECLIP);
}
}

View File

@ -541,7 +541,10 @@ void draw_image_cache(const bContext *C, ARegion *region)
int num_segments = 0;
int *points = NULL;
BLI_mutex_lock(image->runtime.cache_mutex);
IMB_moviecache_get_cache_segments(image->cache, IMB_PROXY_NONE, 0, &num_segments, &points);
BLI_mutex_unlock(image->runtime.cache_mutex);
ED_region_cache_draw_cached_segments(
region, num_segments, points, sfra + sima->iuser.offset, efra + sima->iuser.offset);
}