split apart ardour_ui.cc into a series of distinct source modules.
[ardour.git] / libs / pbd / crossthread.posix.cc
index 72a4fad810dcf221548f00526a6502f96e43513a..97625ce2aa5284267c02962621dda2fc92205e39 100644 (file)
@@ -1,3 +1,22 @@
+/*
+ * Copyright (C) 2014-2016 Paul Davis <paul@linuxaudiosystems.com>
+ * Copyright (C) 2015-2016 Robin Gareus <robin@gareus.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
 #include <poll.h>
 
 CrossThreadChannel::CrossThreadChannel (bool non_blocking)
@@ -30,8 +49,11 @@ CrossThreadChannel::CrossThreadChannel (bool non_blocking)
 CrossThreadChannel::~CrossThreadChannel ()
 {
        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);
-               receive_source = 0;
        }
 
        if (receive_channel) {