From 910f4df45d5096c3ce326860b4d919a1964468ac Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Thu, 13 Feb 2014 18:31:02 +0600 Subject: Fix race condition between tracking thread and tracks map sync This might have been a reason of bug T38281. --- source/blender/blenkernel/intern/tracking_util.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'source/blender/blenkernel/intern/tracking_util.c') diff --git a/source/blender/blenkernel/intern/tracking_util.c b/source/blender/blenkernel/intern/tracking_util.c index 203208cd462..4b3c354dd12 100644 --- a/source/blender/blenkernel/intern/tracking_util.c +++ b/source/blender/blenkernel/intern/tracking_util.c @@ -70,6 +70,8 @@ TracksMap *tracks_map_new(const char *object_name, bool is_camera, int num_track map->hash = BLI_ghash_ptr_new("TracksMap hash"); + BLI_spin_init(&map->spin_lock); + return map; } @@ -139,6 +141,8 @@ void tracks_map_merge(TracksMap *map, MovieTracking *tracking) if (BLI_findindex(old_tracks, old_track) != -1) { BLI_remlink(old_tracks, old_track); + BLI_spin_lock(&map->spin_lock); + /* Copy flags like selection back to the track map. */ track->flag = old_track->flag; track->pat_flag = old_track->pat_flag; @@ -149,6 +153,8 @@ void tracks_map_merge(TracksMap *map, MovieTracking *tracking) *old_track = *track; old_track->markers = MEM_dupallocN(old_track->markers); + BLI_spin_unlock(&map->spin_lock); + BLI_addtail(&tracks, old_track); mapped_to_old = true; @@ -210,6 +216,9 @@ void tracks_map_free(TracksMap *map, void (*customdata_free)(void *customdata)) MEM_freeN(map->customdata); MEM_freeN(map->tracks); + + BLI_spin_end(&map->spin_lock); + MEM_freeN(map); } -- cgit v1.2.3