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:
parent
2973e82a90
commit
b736c50d83
@ -3409,6 +3409,7 @@ Playlist::uncombine (std::shared_ptr<Region> target)
|
|||||||
void
|
void
|
||||||
Playlist::fade_range (list<TimelineRange>& ranges)
|
Playlist::fade_range (list<TimelineRange>& ranges)
|
||||||
{
|
{
|
||||||
|
ThawList thawlist;
|
||||||
RegionReadLock rlock (this);
|
RegionReadLock rlock (this);
|
||||||
for (list<TimelineRange>::iterator r = ranges.begin(); r != ranges.end(); ) {
|
for (list<TimelineRange>::iterator r = ranges.begin(); r != ranges.end(); ) {
|
||||||
list<TimelineRange>::iterator tmpr = r;
|
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 ();) {
|
for (RegionList::const_iterator i = regions.begin (); i != regions.end ();) {
|
||||||
RegionList::const_iterator tmpi = i;
|
RegionList::const_iterator tmpi = i;
|
||||||
++tmpi;
|
++tmpi;
|
||||||
|
thawlist.add (*i);
|
||||||
(*i)->fade_range ((*r).start().samples(), (*r).end().samples());
|
(*i)->fade_range ((*r).start().samples(), (*r).end().samples());
|
||||||
i = tmpi;
|
i = tmpi;
|
||||||
}
|
}
|
||||||
r = tmpr;
|
r = tmpr;
|
||||||
}
|
}
|
||||||
|
rlock.release ();
|
||||||
|
thawlist.release ();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
|
Loading…
Reference in New Issue
Block a user