13
0
Commit Graph

29 Commits

Author SHA1 Message Date
a95be76741 rework request invalidation
This kills 2 birds with 1 stone: Removes the necessity of locks
and makes call_slot() realtime safe (req->invalidation->requests list
push_back). On object destruction, the invalidation-record (IR) itself is
invalidated.

Invalidated IRs are pushed onto a trash-pool and deleted in the event-loop
of the invalidated object (GUI thread) once all requests that reference it
have been processed.

One last detail remains: PBD::signal connect should reference the IR
and disconnect unreference it. This will guarantee that signal emission
will not reference the IR while the pool trash is dropped.
2016-12-15 06:11:30 +01:00
62b06fa427 Add a trash pool for invalidation requests.
While EventLoop::invalidate_request() does invalidate request in the
request-list. It does *not* invalidate requests in the
per-thread-request-ringbuffer(s).
The invalidation record cannot be deleted in EventLoop::invalidate_request
see 6b5891a78f.
2016-12-14 22:39:25 +01:00
77845f6019 Atomically to invalidate request
Yet another slightly overkill approach, but it /may/ explain crashes.
2016-12-14 22:39:18 +01:00
7dbdf6cc6d Add some more invalidation debug messages. 2016-12-14 19:43:12 +01:00
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
dd525d1613 release locks before deleting record 2016-12-14 02:25:13 +01:00
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
cf52d6e4b4 enough with umpteen "i18n.h" files. Consolidate on pbd/i18n.h 2016-07-14 14:45:23 -04:00
455f07d087 fix rare livelock in std::map thread_buffer_requests
During initial session load it's possible that two threads call
PBD::notify_event_loops_about_thread_creation() simultaneously
(in particular the process threads). This can lead to an
endless loop in stl_tree.h when assigning thread_buffer_requests[key]

Now we only have WriteLocks.. unless some better solution comes up a
Mutex will do.
2016-02-14 02:13:04 +01:00
9ab92a67c8 use correct type of lock when removing a thread request buffer 2016-01-14 11:00:40 -05:00
35807a1929 fully clean up request buffers when a thread dies 2016-01-14 10:53:32 -05:00
077c65cc2a manually revert 4b3043cc and 141e6fb8181; add detailed explanatory comment 2016-01-14 09:05:06 -05:00
4b3043ccda use a unique key to store per-thread request buffers 2016-01-13 23:00:02 -05:00
d3ad5c16d1 yet more event loop debug tracing 2016-01-13 21:13:55 -05:00
0d9efc1148 redesign cross-thread registration/signalling system
This new design will work even when threads that need to receive
messages from RT threads are created *after* the RT threads. The
existing design would fail because the RT thread(s) would never
be known the later created threads, and so signals emitted by the
RT thread and causing call_slot() in the receiver would end up
being enqueued using a lock-protected list. The new design ensures
that communication always uses a lock-free FIFO instead
2015-12-28 10:14:17 -05:00
f369f33955 move BaseUI::_name into EventLoop; rename access method in EventLoop as event_loop_name() to clarify usage 2015-12-12 11:12:10 -05:00
22b07e0233 NOOP, remove trailing tabs/whitespace. 2015-10-05 16:17:49 +02:00
4dc63966f0 globally remove all trailing whitespace from ardour code base.
Paul Davis was responsible for introducing almost all of this.
2015-10-04 14:51:05 -04:00
58a027b7a2 add copyright comments
git-svn-id: svn://localhost/ardour2/branches/3.0@13857 d708f5d6-7413-0410-9779-e7cbd77b26cf
2013-01-16 18:15:38 +00:00
3cd8138a41 convert from Glib:: to Glib::Threads for all thread-related API
git-svn-id: svn://localhost/ardour2/branches/3.0@13084 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-07-25 17:48:55 +00:00
6262eae7c0 Remove unnecessary header includes
git-svn-id: svn://localhost/ardour2/branches/3.0@12827 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-06-23 03:51:41 +00:00
d5e14b3d91 eventloop and abstractui debugging, lots more commenting on abstractui/eventloop implementation; minor tweaks elsewhere
git-svn-id: svn://localhost/ardour2/branches/3.0@12076 d708f5d6-7413-0410-9779-e7cbd77b26cf
2012-04-24 16:45:38 +00:00
ee728d763d allow invalidation-of-UI-request-by-object-deletion to work more often by setting the event loop record at connect time, not execution time
git-svn-id: svn://localhost/ardour2/branches/3.0@9379 d708f5d6-7413-0410-9779-e7cbd77b26cf
2011-04-19 16:07:10 +00:00
Carl Hetherington
cf2cd98db0 Fix build.
git-svn-id: svn://localhost/ardour2/branches/3.0@8376 d708f5d6-7413-0410-9779-e7cbd77b26cf
2010-12-29 22:58:05 +00:00
Carl Hetherington
fcd0a44744 Remove debug code.
git-svn-id: svn://localhost/ardour2/branches/3.0@8374 d708f5d6-7413-0410-9779-e7cbd77b26cf
2010-12-29 22:35:43 +00:00
Carl Hetherington
8a8552c4cb Allow cross-thread request invalidators to cope with multiple requests
being logged before they are handled, and to invalidate them all rather
than just the last one.  Fixes shutdown problems when the PortMatrix has
been opened during the session, during which PortRegisteredOrUnregistered
is emitted quite heavily.


git-svn-id: svn://localhost/ardour2/branches/3.0@6852 d708f5d6-7413-0410-9779-e7cbd77b26cf
2010-04-03 00:42:39 +00:00
Carl Hetherington
f14a33e492 Couple of comments.
git-svn-id: svn://localhost/ardour2/branches/3.0@6851 d708f5d6-7413-0410-9779-e7cbd77b26cf
2010-04-02 23:11:15 +00:00
14b0ca31bc handle deletion of UI objects between the time that a callback is queued with the UI event loop and the execution of the callback (intrusive, big)
git-svn-id: svn://localhost/ardour2/branches/3.0@6807 d708f5d6-7413-0410-9779-e7cbd77b26cf
2010-03-30 15:18:43 +00:00
f450df300c fully implement and deploy explicit x-thread signal connection syntax (testing comes next)
git-svn-id: svn://localhost/ardour2/branches/3.0@6379 d708f5d6-7413-0410-9779-e7cbd77b26cf
2009-12-21 18:23:07 +00:00