13
0

Fix deadlock in Playlist::fade_range

Region::fade_range emits a signal which will call
ARDOUR::Playlist::region_bounds_changed, which takes a WriteLock.
That resulted in a WriteLock with ReadLock held.
This commit is contained in:
Robin Gareus 2023-10-15 22:43:24 +02:00
parent 2973e82a90
commit b736c50d83
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04

View File

@ -3409,6 +3409,7 @@ Playlist::uncombine (std::shared_ptr<Region> target)
void
Playlist::fade_range (list<TimelineRange>& ranges)
{
ThawList thawlist;
RegionReadLock rlock (this);
for (list<TimelineRange>::iterator r = ranges.begin(); r != ranges.end(); ) {
list<TimelineRange>::iterator tmpr = r;
@ -3416,11 +3417,14 @@ Playlist::fade_range (list<TimelineRange>& ranges)
for (RegionList::const_iterator i = regions.begin (); i != regions.end ();) {
RegionList::const_iterator tmpi = i;
++tmpi;
thawlist.add (*i);
(*i)->fade_range ((*r).start().samples(), (*r).end().samples());
i = tmpi;
}
r = tmpr;
}
rlock.release ();
thawlist.release ();
}
uint32_t