Commit Graph

16 Commits

Author SHA1 Message Date
Robin Gareus 3e27df9040
Utils: Fix crash at exit due to engine destruction
Ardour::cleanup destroys the TransportMasterManager instance
which unregisters TransportMaster ports. This will crash
if the engine was already destroyed.

See also 7c7bf6c88b
2023-06-15 16:22:23 +02:00
Paul Davis 5d023b4c60 libpbd: fix an important thinko for cross-thread signal architecture
The old code assumed that the thread that created a request buffer for a given
signal-emitting thread would be the latter thread, and thus a thread-local
pointer to the request buffer could be used. This turns out not to be true: the
GUI thread tends to be responsible for constructing the request buffers for
pre-registered threads.

That mechanism has been replaced by using a RWLock protected map using
pthread_t as the key and the request buffer as the value. This allows any
thread to create and register the request buffers used between any other pair
of threads (because the lookup always uses a pthread_t).

The symptoms of this problem were a signal emitted in an audioengine thread
that was propagated to the target thread, but when the target thread scans its
request buffers for requests, it finds nothing (because it didn't know about
the request buffer). In a sense, the signal was successfully delivered to the
target thread, but no meaningful work (i.e the signal handler) is performed.
2023-04-21 12:16:37 -06:00
Robin Gareus 95aa39d1c4
Update call_slot() API, inform caller if slot cannot be queued
It can happen that ::get_request() returns NULL if the
EventPool is full. In that case the slot is never called.

In this case the caller can now take action.
2022-06-09 01:46:27 +02:00
Robin Gareus 16da5419d3
Do not implicitly modify VST support config parameters 2021-08-10 15:54:37 +02:00
Robin Gareus e4e94e77c9
Transmitter::Debug implementation 1/2
This also sorts switch() and listen_to() statements in order
of severity: debug, info, warning, error, fatal, throw.
2020-10-13 21:58:26 +02:00
Robin Gareus dbd8d491e5
Update utility and tools GPL boilerplate and (C) from git log 2019-08-03 15:53:17 +02:00
Paul Davis c60d8cf747 (libs) call ARDOUR::init_post_engine() from within libardour rather than requiring "users" of the library to arrange for it 2019-01-16 15:29:38 -06:00
Robin Gareus 476952f2b6 Add session-util to create a new empty session 2017-09-27 18:22:49 +02:00
Robin Gareus bc713b00c3 Improve help text and error-reporting for ardour-export 2017-08-06 14:47:50 +02:00
Robin Gareus 17881b3221 update UI, new info API, display created_version in tooltip 2017-01-20 18:16:32 +01:00
Robin Gareus 7a1ff7ce8f rework locking (fa07233a, 112fba182)
For now: use a single lock, which should fix all related crashes.
optimize (with less contended partial locks) if this works.
2016-12-14 13:43:20 +01:00
Robin Gareus fa07233a17 mutex 'er up
Some overzealous locking to track down RequestObject related crashes.

bc0fa4d689 wrongly locked the current event loop's
request_invalidation_lock instead of the invalidation's list lock.

Also Abstract UI is able to delete requests concurrently with with
EventLoop invalidation.
e.g. PortManager::PortRegisteredOrUnregistered  and GlobalPortMatrixWindow
so the lock needs to be exposed.

If this solves various issues, mutexes should to be consolidated
(request_buffer_map_lock + request_invalidation_lock) and be chosen
such that there is as little contention as possible.
2016-12-13 23:47:07 +01:00
Robin Gareus f43ccd7321 update session-utils
* use target name in help text
* add options and documentation to copy-mixer
2016-06-03 23:09:18 +02:00
Robin Gareus ea85217437 session-utils tweaks
* emulate 256 i/o (don't loose connections)
* allow "silent" start
2016-06-02 22:25:41 +02:00
Robin Gareus 53d8b45457 session-utils: use session's sample-rate 2015-12-16 23:22:05 +01:00
Robin Gareus b228c11311 commandline session utilities 2015-12-16 00:25:07 +01:00