Merge branch 'wip/lantw/freebsd-kqueue-simple' into 'master'

FreeBSD kqueue file monitor fixes: the simple parts

See merge request GNOME/glib!76
This commit is contained in:
Philip Withnall
2018-06-08 21:36:27 +00:00
3 changed files with 24 additions and 4 deletions

View File

@@ -477,7 +477,15 @@ test_create_delete (gconstpointer d)
* that the monitor will notice a create immediately followed by a
* delete, rather than coalescing them into nothing.
*/
if (!strcmp (G_OBJECT_TYPE_NAME (data->monitor), "GPollFileMonitor"))
/* This test also doesn't work with GKqueueFileMonitor because of
* the same reason. Kqueue is able to return a kevent when a file is
* created or deleted in a directory. However, the kernel doesn't tell
* the program file names, so GKqueueFileMonitor has to calculate the
* difference itself. This is usually too slow for rapid file creation
* and deletion tests.
*/
if (strcmp (G_OBJECT_TYPE_NAME (data->monitor), "GPollFileMonitor") == 0 ||
strcmp (G_OBJECT_TYPE_NAME (data->monitor), "GKqueueFileMonitor") == 0)
{
g_test_skip ("skipping test for this GFileMonitor implementation");
goto skip;

View File

@@ -84,6 +84,19 @@ delete_file_idle (gpointer data)
return G_SOURCE_REMOVE;
}
static gboolean
stop_loop_idle (gpointer data)
{
MonitorData *d = data;
g_assert (d->state == 6);
if (d->loop)
g_main_loop_quit (d->loop);
return G_SOURCE_REMOVE;
}
static void
changed_cb (GFileMonitor *monitor,
GFile *file,
@@ -112,8 +125,7 @@ changed_cb (GFileMonitor *monitor,
case 5:
g_assert (event == G_FILE_MONITOR_EVENT_DELETED);
d->state = 6;
if (d->loop)
g_main_loop_quit (d->loop);
g_idle_add (stop_loop_idle, data);
break;
default:
g_assert_not_reached ();