get Delivery to disconnect from any signals it is connected to relatively early in...
[ardour.git] / libs / ardour / delivery.cc
index 72429e472d025f605c979b9c3aff409ed26692c7..c7ce380a48a34822e48429ed80453560324449cf 100644 (file)
@@ -61,8 +61,7 @@ Delivery::Delivery (Session& s, boost::shared_ptr<IO> io, boost::shared_ptr<Pann
        , _current_gain (1.0)
        , _no_outs_cuz_we_no_monitor (false)
        , _mute_master (mm)
-       , no_panner_reset (false)
-        , scnt (0)
+       , _no_panner_reset (false)
 {
        if (pannable) {
                _panshell = boost::shared_ptr<PannerShell>(new PannerShell (_name, _session, pannable));
@@ -86,8 +85,7 @@ Delivery::Delivery (Session& s, boost::shared_ptr<Pannable> pannable, boost::sha
        , _current_gain (1.0)
        , _no_outs_cuz_we_no_monitor (false)
        , _mute_master (mm)
-       , no_panner_reset (false)
-        , scnt (0)
+       , _no_panner_reset (false)
 {
        if (pannable) {
                _panshell = boost::shared_ptr<PannerShell>(new PannerShell (_name, _session, pannable));
@@ -105,7 +103,16 @@ Delivery::Delivery (Session& s, boost::shared_ptr<Pannable> pannable, boost::sha
 
 Delivery::~Delivery()
 {
-       DEBUG_TRACE (DEBUG::Destruction, string_compose ("delivery %1 destructor\n", _name));
+       DEBUG_TRACE (DEBUG::Destruction, string_compose ("delivery %1 destructor\n", _name));   
+
+       /* this object should vanish from any signal callback lists
+          that it is on before we get any further. The full qualification
+          of the method name is not necessary, but is here to make it 
+          clear that this call is about signals, not data flow connections.
+       */
+
+       ScopedConnectionList::drop_connections ();
+
        delete _output_buffers;
 }
 
@@ -389,7 +396,7 @@ void
 Delivery::reset_panner ()
 {
        if (panners_legal) {
-               if (!no_panner_reset) {
+               if (!_no_panner_reset) {
 
                        if (_panshell) {
                                _panshell->configure_io (ChanCount (DataType::AUDIO, pans_required()), ChanCount (DataType::AUDIO, pan_outs()));
@@ -424,19 +431,19 @@ Delivery::panners_became_legal ()
 void
 Delivery::defer_pan_reset ()
 {
-       no_panner_reset = true;
+       _no_panner_reset = true;
 }
 
 void
 Delivery::allow_pan_reset ()
 {
-       no_panner_reset = false;
+       _no_panner_reset = false;
        reset_panner ();
 }
 
 
 int
-Delivery::disable_panners (void)
+Delivery::disable_panners ()
 {
        panners_legal = false;
        return 0;
@@ -461,7 +468,7 @@ Delivery::flush_buffers (framecnt_t nframes, framepos_t time)
        PortSet& ports (_output->ports());
 
        for (PortSet::iterator i = ports.begin(); i != ports.end(); ++i) {
-               (*i).flush_buffers (nframes, time);
+               i->flush_buffers (nframes, time);
        }
 }
 
@@ -478,7 +485,7 @@ Delivery::transport_stopped (framepos_t now)
                 PortSet& ports (_output->ports());
 
                 for (PortSet::iterator i = ports.begin(); i != ports.end(); ++i) {
-                        (*i).transport_stopped ();
+                        i->transport_stopped ();
                 }
         }
 }
@@ -490,7 +497,7 @@ Delivery::realtime_locate ()
                 PortSet& ports (_output->ports());
 
                 for (PortSet::iterator i = ports.begin(); i != ports.end(); ++i) {
-                        (*i).realtime_locate ();
+                        i->realtime_locate ();
                 }
         }
 }