X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fpbd%2Fsignals.h;h=df4c9cef29331c5d3b0477143d932e0c7fc4df8e;hb=d19ec8ba46274bd41c251f81e63503183db15f08;hp=97cfa65300a1bacab25dda5ebc4c7722b30ed695;hpb=22b07e0233a29d9633ffa825a79503befaf2e16e;p=ardour.git diff --git a/libs/pbd/pbd/signals.h b/libs/pbd/pbd/signals.h index 97cfa65300..df4c9cef29 100644 --- a/libs/pbd/pbd/signals.h +++ b/libs/pbd/pbd/signals.h @@ -20,6 +20,8 @@ #ifndef __pbd_signals_h__ #define __pbd_signals_h__ +#include + #include #include @@ -67,7 +69,7 @@ public: #endif protected: - Glib::Threads::Mutex _mutex; + mutable Glib::Threads::Mutex _mutex; #ifdef DEBUG_PBD_SIGNAL_CONNECTIONS bool _debug_connection; #endif @@ -76,7 +78,12 @@ protected: class LIBPBD_API Connection : public boost::enable_shared_from_this { public: - Connection (SignalBase* b) : _signal (b) {} + Connection (SignalBase* b, PBD::EventLoop::InvalidationRecord* ir) : _signal (b), _invalidation_record (ir) + { + if (_invalidation_record) { + _invalidation_record->ref (); + } + } void disconnect () { @@ -87,15 +94,26 @@ public: } } + void disconnected () + { + if (_invalidation_record) { + _invalidation_record->unref (); + } + } + void signal_going_away () { Glib::Threads::Mutex::Lock lm (_mutex); + if (_invalidation_record) { + _invalidation_record->unref (); + } _signal = 0; } private: Glib::Threads::Mutex _mutex; SignalBase* _signal; + PBD::EventLoop::InvalidationRecord* _invalidation_record; }; template