6ac8ee41af1157f65988a93ac16c826425f0a08d
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.
Please see the Ardour web site at http://ardour.org/ for all documentation..
For information on building ardour:
http://ardour.org/development.html
Description
Languages
C++
56.5%
C
39.6%
JavaScript
1.3%
Lua
0.9%
Python
0.6%
Other
0.9%