diff --git a/gio/gnetworkmonitorbase.c b/gio/gnetworkmonitorbase.c
index d42f6d4ab..530b0be83 100644
--- a/gio/gnetworkmonitorbase.c
+++ b/gio/gnetworkmonitorbase.c
@@ -74,6 +74,7 @@ G_DEFINE_TYPE_WITH_CODE (GNetworkMonitorBase, g_network_monitor_base, G_TYPE_OBJ
 static void
 g_network_monitor_base_init (GNetworkMonitorBase *monitor)
 {
+	g_print ("%p %s: %p\n", g_thread_self (), __FUNCTION__, monitor);
   monitor->priv = g_network_monitor_base_get_instance_private (monitor);
   monitor->priv->networks = g_ptr_array_new_with_free_func (g_object_unref);
   monitor->priv->context = g_main_context_get_thread_default ();
@@ -154,6 +155,7 @@ g_network_monitor_base_finalize (GObject *object)
     g_main_context_unref (monitor->priv->context);
 
   G_OBJECT_CLASS (g_network_monitor_base_parent_class)->finalize (object);
+  g_print ("%p %s: %p\n", g_thread_self (), __FUNCTION__, monitor);
 }
 
 static void
@@ -358,6 +360,10 @@ emit_network_changed (gpointer user_data)
   GNetworkMonitorBase *monitor = user_data;
   gboolean is_available;
 
+  if (g_source_is_destroyed (g_main_current_source ())) {
+    g_print ("%p %s: already destroyed %p\n", g_thread_self (), __FUNCTION__, monitor);
+    return FALSE;
+  }
   g_object_ref (monitor);
 
   if (monitor->priv->initializing)
