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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user