+static gboolean
+mount_change_poller (gpointer user_data)
+{
+ GUnixMountMonitor *mount_monitor;
+ GList *current_mounts, *new_it, *old_it;
+ gboolean has_changed = FALSE;
+
+ mount_monitor = user_data;
+ current_mounts = _g_get_unix_mounts ();
+
+ for ( new_it = current_mounts, old_it = mount_monitor->mount_poller_mounts;
+ new_it != NULL && old_it != NULL;
+ new_it = g_list_next (new_it), old_it = g_list_next (old_it) )
+ {
+ if (g_unix_mount_compare (new_it->data, old_it->data) != 0)
+ {
+ has_changed = TRUE;
+ break;
+ }
+ }
+ if (!(new_it == NULL && old_it == NULL))
+ has_changed = TRUE;
+
+ g_list_free_full (mount_monitor->mount_poller_mounts,
+ (GDestroyNotify)g_unix_mount_free);
+
+ mount_monitor->mount_poller_mounts = current_mounts;
+
+ if (has_changed)
+ {
+ mount_poller_time = (guint64)g_get_monotonic_time ();
+ g_signal_emit (mount_monitor, signals[MOUNTS_CHANGED], 0);
+ }
+
+ return TRUE;
+}
+