Add control-focus notifications from bindable widgets.
[ardour.git] / libs / pbd / crossthread.posix.cc
index e3f6df5a311e357b2df20f12b822c9e12a740779..573671ba995801302441c19b1da4d3234175a921 100644 (file)
@@ -2,6 +2,7 @@
 
 CrossThreadChannel::CrossThreadChannel (bool non_blocking)
         : receive_channel (0)
+        , receive_source (0)
 {
        fds[0] = -1;
        fds[1] = -1;
@@ -28,8 +29,17 @@ CrossThreadChannel::CrossThreadChannel (bool non_blocking)
 
 CrossThreadChannel::~CrossThreadChannel ()
 {
-        if (receive_channel) {
+       if (receive_source) {
+               /* this disconnects it from any main context it was attached in
+                  in ::attach(), this prevent its callback from being invoked
+                  after the destructor has finished.
+               */
+               g_source_destroy (receive_source);
+       }
+
+       if (receive_channel) {
                 g_io_channel_unref (receive_channel);
+                receive_channel = 0;
         }
 
        if (fds[0] >= 0) {