summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r--libs/ardour/ardour/audio_diskstream.h7
-rw-r--r--libs/ardour/ardour/audio_track.h4
-rw-r--r--libs/ardour/ardour/audioengine.h5
-rw-r--r--libs/ardour/ardour/diskstream.h21
-rw-r--r--libs/ardour/ardour/route.h5
-rw-r--r--libs/ardour/ardour/session.h18
-rw-r--r--libs/ardour/ardour/track.h6
7 files changed, 26 insertions, 40 deletions
diff --git a/libs/ardour/ardour/audio_diskstream.h b/libs/ardour/ardour/audio_diskstream.h
index 0cc2079d8e..18f8328cfd 100644
--- a/libs/ardour/ardour/audio_diskstream.h
+++ b/libs/ardour/ardour/audio_diskstream.h
@@ -59,12 +59,10 @@ class AudioDiskstream : public Diskstream
public:
AudioDiskstream (Session &, const string& name, Diskstream::Flag f = Recordable);
AudioDiskstream (Session &, const XMLNode&);
+ ~AudioDiskstream();
const PBD::ID& id() const { return _id; }
- // FIXME
- AudioDiskstream& ref() { _refcnt++; return *this; }
-
float playback_buffer_load() const;
float capture_buffer_load() const;
@@ -176,9 +174,6 @@ class AudioDiskstream : public Diskstream
private:
- /* use unref() to destroy a diskstream */
- ~AudioDiskstream();
-
struct ChannelInfo {
Sample *playback_wrap_buffer;
diff --git a/libs/ardour/ardour/audio_track.h b/libs/ardour/ardour/audio_track.h
index 9892179085..33010dc880 100644
--- a/libs/ardour/ardour/audio_track.h
+++ b/libs/ardour/ardour/audio_track.h
@@ -46,7 +46,7 @@ class AudioTrack : public Track
int silent_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame,
jack_nframes_t offset, bool can_record, bool rec_monitors_input);
- AudioDiskstream& audio_diskstream() const;
+ boost::shared_ptr<AudioDiskstream> audio_diskstream() const;
int use_diskstream (string name);
int use_diskstream (const PBD::ID& id);
@@ -71,7 +71,7 @@ class AudioTrack : public Track
uint32_t n_process_buffers ();
private:
- int set_diskstream (AudioDiskstream&, void *);
+ int set_diskstream (boost::shared_ptr<AudioDiskstream>, void *);
int deprecated_use_diskstream_connections ();
void set_state_part_two ();
void set_state_part_three ();
diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h
index e7500fc7a2..00a0ce6b19 100644
--- a/libs/ardour/ardour/audioengine.h
+++ b/libs/ardour/ardour/audioengine.h
@@ -31,6 +31,8 @@
#include <glibmm/thread.h>
+#include <pbd/rcu.h>
+
#include <ardour/ardour.h>
#include <jack/jack.h>
#include <jack/transport.h>
@@ -189,7 +191,6 @@ class AudioEngine : public sigc::trackable
ARDOUR::Session *session;
jack_client_t *_jack;
std::string jack_client_name;
- Glib::Mutex port_lock;
Glib::Mutex _process_lock;
Glib::Mutex session_remove_lock;
Glib::Cond session_removed;
@@ -208,7 +209,7 @@ class AudioEngine : public sigc::trackable
int _usecs_per_cycle;
typedef std::set<Port*> Ports;
- Ports ports;
+ SerializedRCUManager<Ports> ports;
int process_callback (jack_nframes_t nframes);
void remove_all_ports ();
diff --git a/libs/ardour/ardour/diskstream.h b/libs/ardour/ardour/diskstream.h
index e0202a4fae..bcd418b452 100644
--- a/libs/ardour/ardour/diskstream.h
+++ b/libs/ardour/ardour/diskstream.h
@@ -34,6 +34,7 @@
#include <pbd/fastlog.h>
#include <pbd/ringbufferNPT.h>
#include <pbd/stateful.h>
+#include <pbd/destructible.h>
#include <ardour/ardour.h>
#include <ardour/configuration.h>
@@ -43,7 +44,6 @@
#include <ardour/port.h>
#include <ardour/utils.h>
-
struct tm;
namespace ARDOUR {
@@ -54,7 +54,7 @@ class Session;
class Playlist;
class IO;
-class Diskstream : public Stateful, public sigc::trackable
+ class Diskstream : public Stateful, public sigc::trackable, public PBD::Destructible
{
public:
enum Flag {
@@ -63,16 +63,16 @@ class Diskstream : public Stateful, public sigc::trackable
Destructive = 0x4
};
+ Diskstream (Session &, const string& name, Flag f = Recordable);
+ Diskstream (Session &, const XMLNode&);
+ virtual ~Diskstream();
+
string name () const { return _name; }
virtual int set_name (string str);
ARDOUR::IO* io() const { return _io; }
void set_io (ARDOUR::IO& io);
- virtual Diskstream& ref() { _refcnt++; return *this; }
- void unref() { if (_refcnt) _refcnt--; if (_refcnt == 0) delete this; }
- uint32_t refcnt() const { return _refcnt; }
-
virtual float playback_buffer_load() const = 0;
virtual float capture_buffer_load() const = 0;
@@ -148,15 +148,11 @@ class Diskstream : public Stateful, public sigc::trackable
static sigc::signal<void> DiskOverrun;
static sigc::signal<void> DiskUnderrun;
- static sigc::signal<void,Diskstream*> DiskstreamCreated; // XXX use a ref with sigc2
static sigc::signal<void,list<Source*>*> DeleteSources;
protected:
friend class Session;
- Diskstream (Session &, const string& name, Flag f = Recordable);
- Diskstream (Session &, const XMLNode&);
-
/* the Session is the only point of access for these because they require
* that the Session is "inactive" while they are called.
*/
@@ -187,9 +183,6 @@ class Diskstream : public Stateful, public sigc::trackable
//private:
- /** Use unref() to destroy a diskstream */
- virtual ~Diskstream();
-
enum TransitionType {
CaptureStart = 0,
CaptureEnd
@@ -304,8 +297,6 @@ class Diskstream : public Stateful, public sigc::trackable
jack_nframes_t scrub_buffer_size;
jack_nframes_t scrub_offset;
- uint32_t _refcnt;
-
sigc::connection ports_created_c;
sigc::connection plmod_connection;
sigc::connection plstate_connection;
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h
index d1db818e40..ff7aa6184c 100644
--- a/libs/ardour/ardour/route.h
+++ b/libs/ardour/ardour/route.h
@@ -35,6 +35,7 @@
#include <pbd/undo.h>
#include <pbd/stateful.h>
#include <pbd/controllable.h>
+#include <pbd/destructible.h>
#include <ardour/ardour.h>
#include <ardour/io.h>
@@ -55,7 +56,7 @@ enum mute_type {
MAIN_OUTS = 0x8
};
-class Route : public IO
+ class Route : public IO, public PBD::Destructible
{
protected:
@@ -192,8 +193,6 @@ class Route : public IO
sigc::signal<void> active_changed;
sigc::signal<void,void*> meter_change;
- sigc::signal<void> GoingAway;
-
/* gui's call this for their own purposes. */
sigc::signal<void,std::string,void*> gui_changed;
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index d067de4e68..3763ebe91e 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -270,8 +270,9 @@ class Session : public sigc::trackable, public Stateful
vector<Sample*>& get_silent_buffers (uint32_t howmany);
vector<Sample*>& get_send_buffers () { return _send_buffers; }
- Diskstream* diskstream_by_id (const PBD::ID& id);
- Diskstream* diskstream_by_name (string name);
+ void add_diskstream (boost::shared_ptr<Diskstream>);
+ boost::shared_ptr<Diskstream> diskstream_by_id (const PBD::ID& id);
+ boost::shared_ptr<Diskstream> diskstream_by_name (string name);
bool have_captured() const { return _have_captured; }
@@ -281,9 +282,8 @@ class Session : public sigc::trackable, public Stateful
uint32_t get_next_diskstream_id() const { return n_diskstreams(); }
uint32_t n_diskstreams() const;
- typedef list<Diskstream *> DiskstreamList;
-
- typedef std::list<boost::shared_ptr<Route> > RouteList;
+ typedef std::list<boost::shared_ptr<Diskstream> > DiskstreamList;
+ typedef std::list<boost::shared_ptr<Route> > RouteList;
boost::shared_ptr<RouteList> get_routes() const {
return routes.reader ();
@@ -346,7 +346,6 @@ class Session : public sigc::trackable, public Stateful
sigc::signal<void> HaltOnXrun;
sigc::signal<void,boost::shared_ptr<Route> > RouteAdded;
- sigc::signal<void,Diskstream*> DiskstreamAdded; // FIXME: make a shared_ptr
void request_roll ();
void request_bounded_roll (jack_nframes_t start, jack_nframes_t end);
@@ -1509,10 +1508,9 @@ class Session : public sigc::trackable, public Stateful
/* disk-streams */
- DiskstreamList diskstreams;
- mutable Glib::RWLock diskstream_lock;
+ SerializedRCUManager<DiskstreamList> diskstreams;
+
uint32_t dstream_buffer_size;
- void add_diskstream (Diskstream*);
int load_diskstreams (const XMLNode&);
/* routes stuff */
@@ -1580,7 +1578,7 @@ class Session : public sigc::trackable, public Stateful
Playlist *XMLPlaylistFactory (const XMLNode&);
void playlist_length_changed (Playlist *);
- void diskstream_playlist_changed (Diskstream *);
+ void diskstream_playlist_changed (boost::shared_ptr<Diskstream>);
/* NAMED SELECTIONS */
diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h
index 4e2af5c80e..ec444e78dc 100644
--- a/libs/ardour/ardour/track.h
+++ b/libs/ardour/ardour/track.h
@@ -19,6 +19,8 @@
#ifndef __ardour_track_h__
#define __ardour_track_h__
+#include <boost/shared_ptr.hpp>
+
#include <ardour/route.h>
namespace ARDOUR {
@@ -50,7 +52,7 @@ class Track : public Route
virtual bool can_record();
- Diskstream& diskstream() const { return *_diskstream; }
+ boost::shared_ptr<Diskstream> diskstream() const { return _diskstream; }
virtual int use_diskstream (string name) = 0;
virtual int use_diskstream (const PBD::ID& id) = 0;
@@ -100,7 +102,7 @@ class Track : public Route
virtual uint32_t n_process_buffers () = 0;
- Diskstream *_diskstream;
+ boost::shared_ptr<Diskstream> _diskstream;
MeterPoint _saved_meter_point;
TrackMode _mode;