The aim is to move parts of vir_event_thread_finalize() that MAY
block into a separate function, so that unrefing the a
virEventThread no longer blocks (or require releasing and
subsequent re-acquiring of a mutex).
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
# util/vireventthread.h
virEventThreadGetContext;
virEventThreadNew;
+virEventThreadStop;
# util/virfcp.h
}
+/**
+ * virEventThreadStop:
+ * @evt: event thread
+ *
+ * May block until all events are processed. Typical use case is:
+ *
+ * virEventThread *evt = virEventThreadNew("name");
+ * ...
+ * virEventThreadStop(evt);
+ * g_object_unref(evt);
+ */
+void
+virEventThreadStop(virEventThread *evt)
+{
+ if (evt->thread) {
+ g_main_loop_quit(evt->loop);
+ g_thread_join(evt->thread);
+ evt->thread = NULL;
+ }
+}
+
+
GMainContext *
virEventThreadGetContext(virEventThread *evt)
{
virEventThread *virEventThreadNew(const char *name);
+void virEventThreadStop(virEventThread *evt);
+
GMainContext *virEventThreadGetContext(virEventThread *evt);