Robin Gareus a1b4f9b8ab Fix deletion of VCA with slaved controls.
The crashed previously because:
 A VCA is-a Automatable is-a Evoral::ControlSet

 After VCA's d'tor completes ~Automatable runs and emits signal to
 DropReferences of all master-controls.

 This in turn calls SlavableAutomationControl::master_going_away()
 for slaved parameters for the given master-control

 In ::master_going_away() the weak-pointer reference to the master's
 AutomationControl (owned by the destroyed VCA) is still valid.

 Execution is in the d'tor of Automatable which is-a ControlSet and
 the ContolSet keeps a reference to the Control and hence also to the
 AutomationControl which is-a Evoral::Control.

 So master_going_away() locks a boost::shared_ptr<ARDOUR::AutomationControl>
 which is actually the MuteControl owned by the VCA.
 It calls SlavableAutomationControl::remove_master() which
 in turn calls MuteControl::pre_remove_master() which uses the
 MuteMaster API to retrieve the value. The MuteMaster however is the
 VCA that has just been destroyed.


The solution is twofold:
 1) emit "drop_references" from the VCA d'tor itself,
    before the VCA is destroyed.

 2) disconnect a slaved control from the master's drop_references signal
    when un-assigning a master-control.
2017-06-09 23:25:42 +02:00
2016-02-28 21:16:44 +01:00
2017-05-12 15:28:32 -07:00
2016-08-24 10:07:21 -07:00
2017-05-15 22:49:37 +02:00
2016-06-25 00:44:04 +02:00
2009-11-09 14:13:59 +00:00
2016-10-18 22:26:23 +02:00
2013-03-13 14:35:39 -04:00
2017-01-05 09:21:12 +00:00
2016-02-28 21:48:49 +01:00

Please see the Ardour web site at http://ardour.org/ for all documentation..

For information on building ardour: 
      
     http://ardour.org/development.html
Description
No description provided
Readme 202 MiB
Languages
C++ 56.5%
C 39.6%
JavaScript 1.3%
Lua 0.9%
Python 0.6%
Other 0.9%