Age | Commit message (Collapse) | Author |
|
Background thread now *must* set "done" as last step. (they already do
since various error conditions don't result in "done")
This fixes a race: background thread Session::write_one_track() sets "done"
to true. Editor::freeze_route () continues, sets current_interthread_info
to NULL. thread continues and tries to set current_interthread_info.done
before terminating -> Crash.
This also ensures that singleton threads created with
"pthread_create_and_store" remain unique.
|
|
|
|
|
|
..to prevent switching forth and back during individual
::state(), ::set_state() when loading/saving the session or locating.
|
|
|
|
|
|
Ignore latency-updates while removing tracks.
remove_tracks() calls disconnect_all() which can trigger the backend
to perform a latency-recompute in a different thread (process thread).
That calls Session::update_latency() which iterates over all routes
including the one(s) to be deleted.
At the same time disconnect_all() may propagate Port::PostDisconnect()
leading to a lock contention.
(no crash just a lot of unnecessary work. remove_routes() calls
update_latency_compensation() which triggers a recompute if needed)
|
|
This prevents a memory leak: The session is closed.
The session-butler drops memory pool trash. The Engine keeps running.
Once the AudioEngine is taken down (sample-rate switch, or at exit),
the backend process-thread is terminated but there is no trash-can anymore.
If there are unprocessed SessionEvents, this calls
free_per_thread_pool() -> cp->parent()->add_to_trash (cp).
"parent()" in this case the trash-can the butler emptied.
|
|
|
|
..and the engine is running at the desired samplerate
|
|
|
|
|
|
|
|
|
|
significantly speeds up session close
|
|
This prevents a deadlock with (some versions) jack:
* add new instrument track with instrument
* configure processors (takes processor lock)
* add I/Os (delivery) -> create ports
* auto-connect ports
* jack port-connect -> jack graph re-order
* Ardour graph-re-order
* needs processor lock (to check sends)
|
|
Send::set_state() unsets the current send-id before setting
the new one, but by default _bitset defaults to zero.
This may lead to unset an existing send "0"
|
|
Mixbus does not expose the "auto_connect_standard_busses" preference
and forces it to false.
|
|
|
|
|
|
|
|
|
|
Some trickery is needed here to manage object lifetimes and
multiple inheritance.
|
|
When allowing to cross-connect plugin-ports, inplace processing can
no longer be used. We need a complete set of independent input and
output buffers.
Since scratch and silent buffers are used by the various plugin
implementations we cannot re-use them in the PluginInsert.
Besides we need a complete BufferSet which can hold both: ins + outs.
|
|
|
|
|
|
|
|
|
|
ARDOUR::Session::~Session()
ARDOUR::Route::~Route()
ARDOUR::InternalReturn::~InternalReturn()
ARDOUR::Return::~Return()
ARDOUR::Session::unmark_return_id(unsigned int)
boost::dynamic_bitset<unsigned int, std::allocator<unsigned int> >::reference::do_assign(bool)
-> Invalid write of size 4
-> 0 bytes inside a block of size 4 free'd
Thanks to The_CLA for valgrinding this.
|
|
|
|
tracks/busses.
THIS DOES NOT WORK YET. Selection information is not available in libardour at this time
|
|
In preparation for Lua bindings this completes the basic set of
Session object lookup: route, source, controllable, region, processor
|
|
a shortcut
|
|
|
|
Add logic to RouteGroupMember::use_group() to implement the real intent of InverseGroup
|
|
|
|
|
|
This reverts commit a9ec547457bfa65655ee946063426f1ba85b6f91.
|
|
|
|
Executive decisions were necessary in a couple of places about the correct group disposition
behaviour, notably faderport and OSC surfaces
|
|
|
|
It used to be owned by Amp. Now it is owned by Amp's owner
|
|
|
|
|
|
The initial value of Config::get_use_monitor_bus() may not reflect
the current session's state when loading a session.
|
|
This also removes Route::group_gain_control() and associated machinery.
Not yet tested with Mackie or other surfaces. More work to done to
start using the group capabilities, and also potentially to add
or derive more controls as RouteAutomationControls
|
|
|
|
The Analyser only holds a weak-pointer the the Source,
session-destruction frees the actual Source, which is fatal for any
ongoing audio analysis.
This fix simply waits for the current ongoing analysis to complete,
ideally TransientDetector::run, EBUr128Analysis::run, OnsetDetector::run
and AudioAnalyser::analyse could be interrupted.
Alternate option: cancel the Analyser::work thread (and re-create with
the every session).
|
|
|
|
This includes removing the removal of ID values in XML, and its replacement with
thread-local forcing of ID resets, implemented in a previous commit
|