Collect Playlist::ContentsChanged() signals #8626
With a large session: Editor::insert_time() -> Playlist::shift() -> 4000+ regions are modified -> 4k calls to Region::send_change() -> --"-- Playlist::region_changed () -> --"-- Playlist::region_bounds_changed () -> --"-- Playlist::notify_contents_changed () -> --"-- ContentsChanged () /* EMIT SIGNAL */ -> --"-- DiskReader::playlist_modified () -> 4k Session::request_overwrite_buffer events are queued The butler thread processes them all in the background, but this also enqueues 4k+ events to the GUI event pool since the GUI subscribed to Playlist::ContentsChanged (). However the GUI is inside Editor::insert_time() and cannot handle events. So they keep accumulating, and eventually hits "POOL OUT OF MEMORY - RECOMPILE WITH LARGER SIZE!" -=- This fixes the issue by collecting blocking ::notify_contents_changed until all region_changed() events are processed, and a single call to Playlist::flush_notifications() notifies the UI and disk-reader.
This commit is contained in:
parent
d08b9eaa8d
commit
6ac8ee41af
@ -326,10 +326,10 @@ protected:
|
||||
~RegionWriteLock ()
|
||||
{
|
||||
Glib::Threads::RWLock::WriterLock::release ();
|
||||
thawlist.release ();
|
||||
if (block_notify) {
|
||||
playlist->release_notifications ();
|
||||
}
|
||||
thawlist.release ();
|
||||
}
|
||||
|
||||
ThawList thawlist;
|
||||
|
Loading…
Reference in New Issue
Block a user