don't (re)create disk reader/writer if they already exist
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 25 Jul 2017 17:02:37 +0000 (13:02 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 18 Sep 2017 15:40:53 +0000 (11:40 -0400)
libs/ardour/track.cc

index 3b0e891b2b34c8390b1b5eafe400cd528eb6f33e..448ac02ec7ab9b414d8a7439cfe010c20e2ea3f8 100644 (file)
@@ -126,14 +126,17 @@ Track::add_processors_oh_children_of_mine ()
         } else if (_mode == NonLayered){
                dflags = DiskIOProcessor::Flag(dflags | DiskIOProcessor::NonLayered);
         }
+        if (!_disk_reader) {
+               _disk_reader.reset (new DiskReader (_session, name(), dflags));
+               _disk_reader->set_block_size (_session.get_block_size ());
+               _disk_reader->set_route (boost::dynamic_pointer_cast<Route> (shared_from_this()));
+        }
 
-        _disk_reader.reset (new DiskReader (_session, name(), dflags));
-        _disk_reader->set_block_size (_session.get_block_size ());
-        _disk_reader->set_route (boost::dynamic_pointer_cast<Route> (shared_from_this()));
-
-        _disk_writer.reset (new DiskWriter (_session, name(), dflags));
-        _disk_writer->set_block_size (_session.get_block_size ());
-        _disk_writer->set_route (boost::dynamic_pointer_cast<Route> (shared_from_this()));
+        if (!_disk_writer) {
+               _disk_writer.reset (new DiskWriter (_session, name(), dflags));
+               _disk_writer->set_block_size (_session.get_block_size ());
+               _disk_writer->set_route (boost::dynamic_pointer_cast<Route> (shared_from_this()));
+        }
 }
 
 void