From: "Daniel P. Berrange" <berrange(a)redhat.com>
Since the event APIs are now in the public header, no internal
code should include virevent.h
---
src/Makefile.am | 2 +-
src/rpc/virnetclientstream.c | 1 -
src/rpc/virnetserver.c | 1 -
src/rpc/virnetservermdns.c | 1 -
src/rpc/virnetsocket.c | 1 -
src/util/event.c | 253 -------------------------------------------
src/util/event.h | 28 -----
src/util/virevent.c | 253 +++++++++++++++++++++++++++++++++++++++++++
src/util/virevent.h | 28 +++++
tests/eventtest.c | 1 -
10 files changed, 282 insertions(+), 287 deletions(-)
delete mode 100644 src/util/event.c
delete mode 100644 src/util/event.h
create mode 100644 src/util/virevent.c
create mode 100644 src/util/virevent.h
diff --git a/src/Makefile.am b/src/Makefile.am
index daefa95..5c0d668 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -53,7 +53,6 @@ augeastest_DATA =
# These files are not related to driver APIs. Simply generic
# helper APIs for various purposes
UTIL_SOURCES = \
- util/event.c util/event.h \
util/event_poll.c util/event_poll.h \
util/hooks.c util/hooks.h \
util/iptables.c util/iptables.h \
@@ -83,6 +82,7 @@ UTIL_SOURCES = \
util/virconf.c util/virconf.h \
util/virdnsmasq.c util/virdnsmasq.h \
util/virebtables.c util/virebtables.h \
+ util/virevent.c util/virevent.h \
util/virfile.c util/virfile.h \
util/virnodesuspend.c util/virnodesuspend.h \
util/virobject.c util/virobject.h \
diff --git a/src/rpc/virnetclientstream.c b/src/rpc/virnetclientstream.c
index 4ed40ca..0e7e38e 100644
--- a/src/rpc/virnetclientstream.c
+++ b/src/rpc/virnetclientstream.c
@@ -27,7 +27,6 @@
#include "memory.h"
#include "virterror_internal.h"
#include "logging.h"
-#include "event.h"
#include "threads.h"
#define VIR_FROM_THIS VIR_FROM_RPC
diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c
index 6a5a53a..f686a8f 100644
--- a/src/rpc/virnetserver.c
+++ b/src/rpc/virnetserver.c
@@ -35,7 +35,6 @@
#include "threadpool.h"
#include "util.h"
#include "virfile.h"
-#include "event.h"
#include "virnetservermdns.h"
#include "virdbus.h"
diff --git a/src/rpc/virnetservermdns.c b/src/rpc/virnetservermdns.c
index b55d403..0ddb9d8 100644
--- a/src/rpc/virnetservermdns.c
+++ b/src/rpc/virnetservermdns.c
@@ -41,7 +41,6 @@
#endif
#include "virnetservermdns.h"
-#include "event.h"
#include "event_poll.h"
#include "memory.h"
#include "virterror_internal.h"
diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c
index 70c621f..5a2eab3 100644
--- a/src/rpc/virnetsocket.c
+++ b/src/rpc/virnetsocket.c
@@ -46,7 +46,6 @@
#include "virterror_internal.h"
#include "logging.h"
#include "virfile.h"
-#include "event.h"
#include "threads.h"
#include "virprocess.h"
diff --git a/src/util/event.c b/src/util/event.c
deleted file mode 100644
index 0abc30b..0000000
--- a/src/util/event.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * event.c: event loop for monitoring file handles
- *
- * Copyright (C) 2007, 2011 Red Hat, Inc.
- * Copyright (C) 2007 Daniel P. Berrange
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see
- * <
http://www.gnu.org/licenses/>.
- *
- * Author: Daniel P. Berrange <berrange(a)redhat.com>
- */
-
-#include <config.h>
-
-#include "event.h"
-#include "event_poll.h"
-#include "logging.h"
-#include "virterror_internal.h"
-
-#include <stdlib.h>
-
-static virEventAddHandleFunc addHandleImpl = NULL;
-static virEventUpdateHandleFunc updateHandleImpl = NULL;
-static virEventRemoveHandleFunc removeHandleImpl = NULL;
-static virEventAddTimeoutFunc addTimeoutImpl = NULL;
-static virEventUpdateTimeoutFunc updateTimeoutImpl = NULL;
-static virEventRemoveTimeoutFunc removeTimeoutImpl = NULL;
-
-/**
- * virEventAddHandle: register a callback for monitoring file handle events
- *
- * @fd: file handle to monitor for events
- * @events: bitset of events to watch from virEventHandleType constants
- * @cb: callback to invoke when an event occurs
- * @opaque: user data to pass to callback
- *
- * returns -1 if the file handle cannot be registered, 0 upon success
- */
-int virEventAddHandle(int fd,
- int events,
- virEventHandleCallback cb,
- void *opaque,
- virFreeCallback ff) {
- if (!addHandleImpl)
- return -1;
-
- return addHandleImpl(fd, events, cb, opaque, ff);
-}
-
-/**
- * virEventUpdateHandle: change event set for a monitored file handle
- *
- * @watch: watch whose file handle to update
- * @events: bitset of events to watch from virEventHandleType constants
- *
- * Will not fail if fd exists
- */
-void virEventUpdateHandle(int watch, int events) {
- updateHandleImpl(watch, events);
-}
-
-/**
- * virEventRemoveHandle: unregister a callback from a file handle
- *
- * @watch: watch whose file handle to remove
- *
- * returns -1 if the file handle was not registered, 0 upon success
- */
-int virEventRemoveHandle(int watch) {
- if (!removeHandleImpl)
- return -1;
-
- return removeHandleImpl(watch);
-}
-
-/**
- * virEventAddTimeout: register a callback for a timer event
- *
- * @timeout: time between events in milliseconds
- * @cb: callback to invoke when an event occurs
- * @opaque: user data to pass to callback
- *
- * Setting timeout to -1 will disable the timer. Setting the timeout
- * to zero will cause it to fire on every event loop iteration.
- *
- * returns -1 if the timer cannot be registered, a positive
- * integer timer id upon success
- */
-int virEventAddTimeout(int timeout,
- virEventTimeoutCallback cb,
- void *opaque,
- virFreeCallback ff) {
- if (!addTimeoutImpl)
- return -1;
-
- return addTimeoutImpl(timeout, cb, opaque, ff);
-}
-
-/**
- * virEventUpdateTimeoutImpl: change frequency for a timer
- *
- * @timer: timer id to change
- * @frequency: time between events in milliseconds
- *
- * Setting frequency to -1 will disable the timer. Setting the frequency
- * to zero will cause it to fire on every event loop iteration.
- *
- * Will not fail if timer exists
- */
-void virEventUpdateTimeout(int timer, int timeout) {
- updateTimeoutImpl(timer, timeout);
-}
-
-/**
- * virEventRemoveTimeout: unregister a callback for a timer
- *
- * @timer: the timer id to remove
- *
- * returns -1 if the timer was not registered, 0 upon success
- */
-int virEventRemoveTimeout(int timer) {
- if (!removeTimeoutImpl)
- return -1;
-
- return removeTimeoutImpl(timer);
-}
-
-
-/*****************************************************
- *
- * Below this point are 3 *PUBLIC* APIs for event
- * loop integration with applications using libvirt.
- * These API contracts cannot be changed.
- *
- *****************************************************/
-
-/**
- * virEventRegisterImpl:
- * @addHandle: the callback to add fd handles
- * @updateHandle: the callback to update fd handles
- * @removeHandle: the callback to remove fd handles
- * @addTimeout: the callback to add a timeout
- * @updateTimeout: the callback to update a timeout
- * @removeTimeout: the callback to remove a timeout
- *
- * Registers an event implementation, to allow integration
- * with an external event loop. Applications would use this
- * to integrate with the libglib2 event loop, or libevent
- * or the QT event loop.
- *
- * If an application does not need to integrate with an
- * existing event loop implementation, then the
- * virEventRegisterDefaultImpl method can be used to setup
- * the generic libvirt implementation.
- */
-void virEventRegisterImpl(virEventAddHandleFunc addHandle,
- virEventUpdateHandleFunc updateHandle,
- virEventRemoveHandleFunc removeHandle,
- virEventAddTimeoutFunc addTimeout,
- virEventUpdateTimeoutFunc updateTimeout,
- virEventRemoveTimeoutFunc removeTimeout)
-{
- VIR_DEBUG("addHandle=%p updateHandle=%p removeHandle=%p "
- "addTimeout=%p updateTimeout=%p removeTimeout=%p",
- addHandle, updateHandle, removeHandle,
- addTimeout, updateTimeout, removeTimeout);
-
- addHandleImpl = addHandle;
- updateHandleImpl = updateHandle;
- removeHandleImpl = removeHandle;
- addTimeoutImpl = addTimeout;
- updateTimeoutImpl = updateTimeout;
- removeTimeoutImpl = removeTimeout;
-}
-
-/**
- * virEventRegisterDefaultImpl:
- *
- * Registers a default event implementation based on the
- * poll() system call. This is a generic implementation
- * that can be used by any client application which does
- * not have a need to integrate with an external event
- * loop impl.
- *
- * Once registered, the application has to invoke virEventRunDefaultImpl in
- * a loop to process events. Failure to do so may result in connections being
- * closed unexpectedly as a result of keepalive timeout.
- *
- * Returns 0 on success, -1 on failure.
- */
-int virEventRegisterDefaultImpl(void)
-{
- VIR_DEBUG("registering default event implementation");
-
- virResetLastError();
-
- if (virEventPollInit() < 0) {
- virDispatchError(NULL);
- return -1;
- }
-
- virEventRegisterImpl(
- virEventPollAddHandle,
- virEventPollUpdateHandle,
- virEventPollRemoveHandle,
- virEventPollAddTimeout,
- virEventPollUpdateTimeout,
- virEventPollRemoveTimeout
- );
-
- return 0;
-}
-
-
-/**
- * virEventRunDefaultImpl:
- *
- * Run one iteration of the event loop. Applications
- * will generally want to have a thread which invokes
- * this method in an infinite loop
- *
- * static bool quit = false;
- *
- * while (!quit) {
- * if (virEventRunDefaultImpl() < 0)
- * ...print error...
- * }
- *
- * Returns 0 on success, -1 on failure.
- */
-int virEventRunDefaultImpl(void)
-{
- VIR_DEBUG("running default event implementation");
- virResetLastError();
-
- if (virEventPollRunOnce() < 0) {
- virDispatchError(NULL);
- return -1;
- }
-
- return 0;
-}
diff --git a/src/util/event.h b/src/util/event.h
deleted file mode 100644
index 5ab567a..0000000
--- a/src/util/event.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * event.h: event loop for monitoring file handles
- *
- * Copyright (C) 2007 Daniel P. Berrange
- * Copyright (C) 2007 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see
- * <
http://www.gnu.org/licenses/>.
- *
- * Author: Daniel P. Berrange <berrange(a)redhat.com>
- */
-
-#ifndef __VIR_EVENT_H__
-# define __VIR_EVENT_H__
-# include "internal.h"
-
-#endif /* __VIR_EVENT_H__ */
diff --git a/src/util/virevent.c b/src/util/virevent.c
new file mode 100644
index 0000000..08b7006
--- /dev/null
+++ b/src/util/virevent.c
@@ -0,0 +1,253 @@
+/*
+ * event.c: event loop for monitoring file handles
+ *
+ * Copyright (C) 2007, 2011 Red Hat, Inc.
+ * Copyright (C) 2007 Daniel P. Berrange
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <
http://www.gnu.org/licenses/>.
+ *
+ * Author: Daniel P. Berrange <berrange(a)redhat.com>
+ */
+
+#include <config.h>
+
+#include "virevent.h"
+#include "event_poll.h"
+#include "logging.h"
+#include "virterror_internal.h"
+
+#include <stdlib.h>
+
+static virEventAddHandleFunc addHandleImpl = NULL;
+static virEventUpdateHandleFunc updateHandleImpl = NULL;
+static virEventRemoveHandleFunc removeHandleImpl = NULL;
+static virEventAddTimeoutFunc addTimeoutImpl = NULL;
+static virEventUpdateTimeoutFunc updateTimeoutImpl = NULL;
+static virEventRemoveTimeoutFunc removeTimeoutImpl = NULL;
+
+/**
+ * virEventAddHandle: register a callback for monitoring file handle events
+ *
+ * @fd: file handle to monitor for events
+ * @events: bitset of events to watch from virEventHandleType constants
+ * @cb: callback to invoke when an event occurs
+ * @opaque: user data to pass to callback
+ *
+ * returns -1 if the file handle cannot be registered, 0 upon success
+ */
+int virEventAddHandle(int fd,
+ int events,
+ virEventHandleCallback cb,
+ void *opaque,
+ virFreeCallback ff) {
+ if (!addHandleImpl)
+ return -1;
+
+ return addHandleImpl(fd, events, cb, opaque, ff);
+}
+
+/**
+ * virEventUpdateHandle: change event set for a monitored file handle
+ *
+ * @watch: watch whose file handle to update
+ * @events: bitset of events to watch from virEventHandleType constants
+ *
+ * Will not fail if fd exists
+ */
+void virEventUpdateHandle(int watch, int events) {
+ updateHandleImpl(watch, events);
+}
+
+/**
+ * virEventRemoveHandle: unregister a callback from a file handle
+ *
+ * @watch: watch whose file handle to remove
+ *
+ * returns -1 if the file handle was not registered, 0 upon success
+ */
+int virEventRemoveHandle(int watch) {
+ if (!removeHandleImpl)
+ return -1;
+
+ return removeHandleImpl(watch);
+}
+
+/**
+ * virEventAddTimeout: register a callback for a timer event
+ *
+ * @timeout: time between events in milliseconds
+ * @cb: callback to invoke when an event occurs
+ * @opaque: user data to pass to callback
+ *
+ * Setting timeout to -1 will disable the timer. Setting the timeout
+ * to zero will cause it to fire on every event loop iteration.
+ *
+ * returns -1 if the timer cannot be registered, a positive
+ * integer timer id upon success
+ */
+int virEventAddTimeout(int timeout,
+ virEventTimeoutCallback cb,
+ void *opaque,
+ virFreeCallback ff) {
+ if (!addTimeoutImpl)
+ return -1;
+
+ return addTimeoutImpl(timeout, cb, opaque, ff);
+}
+
+/**
+ * virEventUpdateTimeoutImpl: change frequency for a timer
+ *
+ * @timer: timer id to change
+ * @frequency: time between events in milliseconds
+ *
+ * Setting frequency to -1 will disable the timer. Setting the frequency
+ * to zero will cause it to fire on every event loop iteration.
+ *
+ * Will not fail if timer exists
+ */
+void virEventUpdateTimeout(int timer, int timeout) {
+ updateTimeoutImpl(timer, timeout);
+}
+
+/**
+ * virEventRemoveTimeout: unregister a callback for a timer
+ *
+ * @timer: the timer id to remove
+ *
+ * returns -1 if the timer was not registered, 0 upon success
+ */
+int virEventRemoveTimeout(int timer) {
+ if (!removeTimeoutImpl)
+ return -1;
+
+ return removeTimeoutImpl(timer);
+}
+
+
+/*****************************************************
+ *
+ * Below this point are 3 *PUBLIC* APIs for event
+ * loop integration with applications using libvirt.
+ * These API contracts cannot be changed.
+ *
+ *****************************************************/
+
+/**
+ * virEventRegisterImpl:
+ * @addHandle: the callback to add fd handles
+ * @updateHandle: the callback to update fd handles
+ * @removeHandle: the callback to remove fd handles
+ * @addTimeout: the callback to add a timeout
+ * @updateTimeout: the callback to update a timeout
+ * @removeTimeout: the callback to remove a timeout
+ *
+ * Registers an event implementation, to allow integration
+ * with an external event loop. Applications would use this
+ * to integrate with the libglib2 event loop, or libevent
+ * or the QT event loop.
+ *
+ * If an application does not need to integrate with an
+ * existing event loop implementation, then the
+ * virEventRegisterDefaultImpl method can be used to setup
+ * the generic libvirt implementation.
+ */
+void virEventRegisterImpl(virEventAddHandleFunc addHandle,
+ virEventUpdateHandleFunc updateHandle,
+ virEventRemoveHandleFunc removeHandle,
+ virEventAddTimeoutFunc addTimeout,
+ virEventUpdateTimeoutFunc updateTimeout,
+ virEventRemoveTimeoutFunc removeTimeout)
+{
+ VIR_DEBUG("addHandle=%p updateHandle=%p removeHandle=%p "
+ "addTimeout=%p updateTimeout=%p removeTimeout=%p",
+ addHandle, updateHandle, removeHandle,
+ addTimeout, updateTimeout, removeTimeout);
+
+ addHandleImpl = addHandle;
+ updateHandleImpl = updateHandle;
+ removeHandleImpl = removeHandle;
+ addTimeoutImpl = addTimeout;
+ updateTimeoutImpl = updateTimeout;
+ removeTimeoutImpl = removeTimeout;
+}
+
+/**
+ * virEventRegisterDefaultImpl:
+ *
+ * Registers a default event implementation based on the
+ * poll() system call. This is a generic implementation
+ * that can be used by any client application which does
+ * not have a need to integrate with an external event
+ * loop impl.
+ *
+ * Once registered, the application has to invoke virEventRunDefaultImpl in
+ * a loop to process events. Failure to do so may result in connections being
+ * closed unexpectedly as a result of keepalive timeout.
+ *
+ * Returns 0 on success, -1 on failure.
+ */
+int virEventRegisterDefaultImpl(void)
+{
+ VIR_DEBUG("registering default event implementation");
+
+ virResetLastError();
+
+ if (virEventPollInit() < 0) {
+ virDispatchError(NULL);
+ return -1;
+ }
+
+ virEventRegisterImpl(
+ virEventPollAddHandle,
+ virEventPollUpdateHandle,
+ virEventPollRemoveHandle,
+ virEventPollAddTimeout,
+ virEventPollUpdateTimeout,
+ virEventPollRemoveTimeout
+ );
+
+ return 0;
+}
+
+
+/**
+ * virEventRunDefaultImpl:
+ *
+ * Run one iteration of the event loop. Applications
+ * will generally want to have a thread which invokes
+ * this method in an infinite loop
+ *
+ * static bool quit = false;
+ *
+ * while (!quit) {
+ * if (virEventRunDefaultImpl() < 0)
+ * ...print error...
+ * }
+ *
+ * Returns 0 on success, -1 on failure.
+ */
+int virEventRunDefaultImpl(void)
+{
+ VIR_DEBUG("running default event implementation");
+ virResetLastError();
+
+ if (virEventPollRunOnce() < 0) {
+ virDispatchError(NULL);
+ return -1;
+ }
+
+ return 0;
+}
diff --git a/src/util/virevent.h b/src/util/virevent.h
new file mode 100644
index 0000000..5ab567a
--- /dev/null
+++ b/src/util/virevent.h
@@ -0,0 +1,28 @@
+/*
+ * event.h: event loop for monitoring file handles
+ *
+ * Copyright (C) 2007 Daniel P. Berrange
+ * Copyright (C) 2007 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <
http://www.gnu.org/licenses/>.
+ *
+ * Author: Daniel P. Berrange <berrange(a)redhat.com>
+ */
+
+#ifndef __VIR_EVENT_H__
+# define __VIR_EVENT_H__
+# include "internal.h"
+
+#endif /* __VIR_EVENT_H__ */
diff --git a/tests/eventtest.c b/tests/eventtest.c
index 78f51b7..c087978 100644
--- a/tests/eventtest.c
+++ b/tests/eventtest.c
@@ -31,7 +31,6 @@
#include "threads.h"
#include "logging.h"
#include "util.h"
-#include "event.h"
#include "event_poll.h"
#define NUM_FDS 31
--
1.7.11.7