Small cleanup: add constructor to InterThreadInfo.
[ardour.git] / libs / ardour / ardour / butler.h
index 60697517fb4095bb20cf86456b7d967dc231aad6..e3760a8c530d50d2b03ada693b5e8395d0b5a60a 100644 (file)
 
 #include <glibmm/thread.h>
 
+#include "pbd/ringbuffer.h"
+#include "pbd/pool.h"
 #include "ardour/types.h"
 #include "ardour/session_handle.h"
 
 namespace ARDOUR {
 
+/**
+ *  One of the Butler's functions is to clean up (ie delete) unused CrossThreadPools.
+ *  When a thread with a CrossThreadPool terminates, its CTP is added to pool_trash.
+ *  When the Butler thread wakes up, we check this trash buffer for CTPs, and if they
+ *  are empty they are deleted.
+ */
+
 class Butler : public SessionHandleRef
 {
   public:
@@ -40,6 +49,7 @@ class Butler : public SessionHandleRef
        void stop();
        void wait_until_finished();
        bool transport_work_requested() const;
+       void drop_references ();
 
        float read_data_rate() const; ///< in usec
        float write_data_rate() const;
@@ -67,6 +77,10 @@ class Butler : public SessionHandleRef
        int          request_pipe[2];
        uint32_t     audio_dstream_buffer_size;
        uint32_t     midi_dstream_buffer_size;
+       RingBuffer<CrossThreadPool*> pool_trash;
+
+private:
+       void empty_pool_trash ();
 };
 
 } // namespace ARDOUR