tests: Use g_idle_add to call g_main_loop_quit

Sometimes file monitor events may be slow to emit. Using g_idle_add
makes it less possible for events to be scheduled later than the main
loop quit, preventing test failure caused by missing events.

This fixes test failure on FreeBSD.
This commit is contained in:
Ting-Wei Lan 2018-06-03 20:51:31 +08:00
parent 41259ac173
commit f288898485

View File

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