summaryrefslogtreecommitdiff
path: root/libs
AgeCommit message (Collapse)Author
2016-12-16more work on patch change redisplay.nick_m
- fixes just-introduced undo crash.
2016-12-16fix thinko in TempoMap::framepos_plus_qn.nick_m
- affects region relative time conversion when initial meter is non-zero.
2016-12-15std::list::erase() needs a non-const iterator.;Paul Davis
at least for some versions of gcc.
2016-12-15and now with eraseRobin Gareus
2016-12-15C++98 compatible iterator eraseRobin Gareus
2016-12-15rework request invalidationRobin Gareus
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-14Add a trash pool for invalidation requests.Robin Gareus
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-14NO-OP: re-indentRobin Gareus
2016-12-14Atomically to invalidate requestRobin Gareus
Yet another slightly overkill approach, but it /may/ explain crashes.
2016-12-14Add some more invalidation debug messages.Robin Gareus
2016-12-14The threading anecdotes - Episode 7Robin Gareus
When do_request() destroys the receiver object, the receiver will free the invalidation record. So the IR needs to be removed from the list before executing the request. Invalid read of size 8 at: AbstractUI<Gtkmm2ext::UIRequest>::handle_ui_requests() (abstract_ui.cc:242) by: BaseUI::request_handler(Glib::IOCondition) (base_ui.cc:141) by: sigc::bound_mem_functor1<bool, BaseUI, Glib::IOCondition>::operator()(Glib::IOCondition const&) const (mem_fun.h:2066) by: sigc::adaptor_functor<sigc::bound_mem_functor1<bool, BaseUI, Glib::IOCondition> >::deduce_result_type<Glib::IOCondition const&, void, void, void, void, void, void>::type sigc::adaptor_functor<sigc::bound_mem_functor1<bool, BaseUI, Glib::IOCondition> >::operator()<Glib::IOCondition const&>(Glib::IOCondition const&) const (adaptor_trait.h:89) by: sigc::internal::slot_call1<sigc::bound_mem_functor1<bool, BaseUI, Glib::IOCondition>, bool, Glib::IOCondition>::call_it(sigc::internal::slot_rep*, Glib::IOCondition const&) (slot.h:148) by: sigc::slot1<bool, Glib::IOCondition>::operator()(Glib::IOCondition const&) const (slot.h:643) by: cross_thread_channel_call_receive_slot(_GIOChannel*, GIOCondition, void*) (crossthread.cc:49) by: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2) by: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2) by: g_main_loop_run (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2) by: gtk_main (in /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0.2400.31) by: Gtkmm2ext::UI::run(Receiver&) (gtk_ui.cc:286) by main (main.cc:408) Addrd1b8 is 24 bytes inside a block of size 48 free'd at: operator delete(void*) (vg_replace_malloc.c:576) by: PBD::EventLoop::invalidate_request(void*) (event_loop.cc:98) by: sigc::internal::trackable_callback_list::~trackable_callback_list() (in /usr/lib/x86_64-linux-gnu/libsigc-2.0.so.0.0.0) by: sigc::trackable::notify_callbacks() (in /usr/lib/x86_64-linux-gnu/libsigc-2.0.so.0.0.0) by: ProcessorEntry::LuaPluginDisplay::~LuaPluginDisplay() (processor_box.cc:1757) by: ProcessorEntry::LuaPluginDisplay::~LuaPluginDisplay() (processor_box.cc:1760) by: ProcessorEntry::~ProcessorEntry() (processor_box.cc:251)
2016-12-14skip dead threads (if the event remains, it'll be cleaned up below)Robin Gareus
2016-12-14fix potential invalid lockRobin Gareus
2016-12-14rework locking (fa07233a, 112fba182)Robin Gareus
For now: use a single lock, which should fix all related crashes. optimize (with less contended partial locks) if this works.
2016-12-14use SMF track or instrument names in imported MIDI track names, if requestedPaul Davis
2016-12-14add new member to ImportStatus object to allow specifying how to name new ↵Paul Davis
MIDI tracks
2016-12-14add a new enum to identify how SMF data should be used when naming imported ↵Paul Davis
MIDI tracks
2016-12-14add API to Evoral::SMF to retrieve all track/instrument names for use when ↵Paul Davis
importing
2016-12-14extract track and instrument names from SMF while loadingPaul Davis
2016-12-14add braces and warning for unlikely errorPaul Davis
2016-12-14fix incorrect test for textual meta events in libsmfPaul Davis
2016-12-14braces pleasePaul Davis
2016-12-14braces, pleasePaul Davis
2016-12-14free track name/instrument string memory when necessaryPaul Davis
2016-12-14add track and instrument name members to smf_track_tPaul Davis
2016-12-14release locks before deleting recordRobin Gareus
2016-12-14amend prev commitRobin Gareus
2016-12-13mutex 'er upRobin Gareus
Some overzealous locking to track down RequestObject related crashes. bc0fa4d689a4 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-13changes to adapt to modified version of GTK/Quartz which uses only MOD2 for ↵Paul Davis
Command, everywhere. The default version of GTK2/Quartz uses MOD2+META for keys and MOD2 for scroll, which is basically insane
2016-12-13Fix layered-record undo, include changes to existing region(s)Robin Gareus
2016-12-12Fix possible crash when removing ports with jack1Robin Gareus
2016-12-12Add Slavable::AssignmentChanged signal to notify when a slavable is ↵Paul Davis
assigned/unassigned to/from a master
2016-12-13only update MidiRegion length_beats in partial copy ctor if there is an offset.nick_m
2016-12-13only recalculate MidiRegion start_beats if there is an offset in the ↵nick_m
'part-of' ctor. - when drag-copying MIDI regions, a partial region ctor is used which can lead to _start_beats being off by a sample. this in turn leads to 7168 happening, but only if magnetic snap is used and the regions are copied as a group. this should fix 7168, but the magnetic snap part is not yet addressed.
2016-12-12Fix a potential deadlock/crash (here tape-track peak-file)Robin Gareus
read_peaks_with_fpp() already holds _lock, build_peaks_from_scratch() takes the _lock again. Depending on glib[mm] and the threading lib it may either result in a deadlock, or with EDEADLK in undefined behavior when a non-recursive lock is released twice.
2016-12-12Fix potential deadlock on session-loadRobin Gareus
2016-12-12disallow placement of audio-locked tempi within a frame of any other.nick_m
2016-12-12fix loop/crash when dragging an audio-locked tempo over a music-locked one ↵nick_m
while snapped to grid.
2016-12-12no-op - rename TempoMap::set_active_tempos -> TempoMap::set_active_tempinick_m
2016-12-12clean up some odd logic.nick_m
2016-12-12rename MetricSection movable -> initial, but of course initial is !movable..nick_m
2016-12-11Add support for MacVST hidden/favoritesRobin Gareus
2016-12-11go back to always interpolating framed curve points.nick_m
2016-12-11make TempoMap::dump slightly more readable.nick_m
2016-12-11fix incorrect audio-locked tempo position when setting bbt via tempo dialog.nick_m
2016-12-11fix bar renumbering for audio-locked metrum.nick_m
2016-12-11Revert "Pixel hunt cairo-packer (status-bar, selection-clock border)"Robin Gareus
This reverts commit 6015481377bc7c96d7e09b263a18b285fe2fc282.
2016-12-11Pixel hunt cairo-packer (status-bar, selection-clock border)Robin Gareus
2016-12-11Check for reserved i/o that are not routes, fixes #7171Robin Gareus
2016-12-10CairoPacker draws outside of its widget allocationRobin Gareus
This fixes fixes TimeInfoBox packing when the InfoBox position changes.