#include <boost/shared_ptr.hpp>
#include <glib.h>
-#include <cassert>
-
-#include <pthread.h>
#include "pbd/semutils.h"
+#include "ardour/libardour_visibility.h"
#include "ardour/types.h"
+#include "ardour/audio_backend.h"
#include "ardour/session_handle.h"
namespace ARDOUR
class Route;
class Session;
-class GraphEdges;
+class GraphEdges;
typedef boost::shared_ptr<GraphNode> node_ptr_t;
typedef std::list< node_ptr_t > node_list_t;
typedef std::set< node_ptr_t > node_set_t;
-class Graph : public SessionHandleRef
+class LIBARDOUR_API Graph : public SessionHandleRef
{
public:
Graph (Session & session);
- uint32_t threads_in_use () const { return _thread_list.size(); }
-
void prep();
void trigger (GraphNode * n);
void rechain (boost::shared_ptr<RouteList>, GraphEdges const &);
virtual void session_going_away ();
private:
- std::list<jack_native_thread_t> _thread_list;
- volatile bool _quit_threads;
+ volatile bool _threads_active;
void reset_thread_list ();
void drop_threads ();
std::vector<GraphNode *> _trigger_queue;
pthread_mutex_t _trigger_mutex;
- PBD::ProcessSemaphore _execution_sem;
+ PBD::Semaphore _execution_sem;
/** Signalled to start a run of the graph for a process callback */
- PBD::ProcessSemaphore _callback_start_sem;
- PBD::ProcessSemaphore _callback_done_sem;
- PBD::ProcessSemaphore _cleanup_sem;
+ PBD::Semaphore _callback_start_sem;
+ PBD::Semaphore _callback_done_sem;
+ PBD::Semaphore _cleanup_sem;
/** The number of processing threads that are asleep */
volatile gint _execution_tokens;
bool _process_noroll;
int _process_retval;
bool _process_need_butler;
+
+ // enginer / thread connection
+ PBD::ScopedConnectionList engine_connections;
+ void engine_stopped ();
};
} // namespace