From 711c78a100649a47c11c90f5efa510421f711013 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Tue, 29 Nov 2011 12:33:23 +0000 Subject: [PATCH 05/13] Remove time APIs from src/util/util.h cherry pick (with small conflict resolution detailed below) from upstream a8bb75a to address: https://bugzilla.redhat.com/show_bug.cgi?id=757382 The virTimestamp and virTimeMs functions in src/util/util.h duplicate functionality from virtime.h, in a non-async signal safe manner. Remove them, and convert all code over to the new APIs. * src/util/util.c, src/util/util.h: Delete virTimeMs and virTimestamp * src/lxc/lxc_driver.c, src/qemu/qemu_domain.c, src/qemu/qemu_driver.c, src/qemu/qemu_migration.c, src/qemu/qemu_process.c, src/util/event_poll.c: Convert to use virtime APIs Conflicts: src/lxc/lxc_driver.c src/qemu/qemu_domain.c src/qemu/qemu_driver.c * the patches contained context with extra include files not yet introduced on the branch. src/util/event_poll.c * the branch had context with a call to EVENT_DEBUG that was no longer existing in the original patch. --- src/libvirt_private.syms | 2 - src/lxc/lxc_driver.c | 3 +- src/qemu/qemu_domain.c | 5 ++- src/qemu/qemu_driver.c | 7 +++-- src/qemu/qemu_migration.c | 5 ++- src/qemu/qemu_process.c | 9 ++++--- src/util/event_poll.c | 10 +++++--- src/util/util.c | 53 --------------------------------------------- src/util/util.h | 4 --- 9 files changed, 23 insertions(+), 75 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index b07676f..b804b34 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1131,8 +1131,6 @@ virStrToLong_ul; virStrToLong_ull; virStrcpy; virStrncpy; -virTimeMs; -virTimestamp; virTrimSpaces; virVasprintf; diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 6cf7203..e7fb46d 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -54,6 +54,7 @@ #include "fdstream.h" #include "domain_audit.h" #include "domain_nwfilter.h" +#include "virtime.h" #define VIR_FROM_THIS VIR_FROM_LXC @@ -1580,7 +1581,7 @@ static int lxcVmStart(virConnectPtr conn, goto cleanup; /* Log timestamp */ - if ((timestamp = virTimestamp()) == NULL) { + if ((timestamp = virTimeStringNow()) == NULL) { virReportOOMError(); goto cleanup; } diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 4023648..66c0de9 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -35,6 +35,7 @@ #include "ignore-value.h" #include "uuid.h" #include "virfile.h" +#include "virtime.h" #include #include @@ -717,7 +718,7 @@ qemuDomainObjBeginJobInternal(struct qemud_driver *driver, priv->jobs_queued++; - if (virTimeMs(&now) < 0) + if (virTimeMillisNow(&now) < 0) return -1; then = now + QEMU_JOB_WAIT_TIME; @@ -911,7 +912,7 @@ qemuDomainObjEnterMonitorInternal(struct qemud_driver *driver, qemuMonitorLock(priv->mon); qemuMonitorRef(priv->mon); - ignore_value(virTimeMs(&priv->monStart)); + ignore_value(virTimeMillisNow(&priv->monStart)); virDomainObjUnlock(obj); if (driver_locked) qemuDriverUnlock(driver); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 0d0bea2..09e0eaa 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -89,6 +89,7 @@ #include "locking/lock_manager.h" #include "locking/domain_lock.h" #include "virkeycode.h" +#include "virtime.h" #define VIR_FROM_THIS VIR_FROM_QEMU @@ -2130,12 +2131,12 @@ qemuDomainGetControlInfo(virDomainPtr dom, } else if (priv->job.active) { if (!priv->monStart) { info->state = VIR_DOMAIN_CONTROL_JOB; - if (virTimeMs(&info->stateTime) < 0) + if (virTimeMillisNow(&info->stateTime) < 0) goto cleanup; info->stateTime -= priv->job.start; } else { info->state = VIR_DOMAIN_CONTROL_OCCUPIED; - if (virTimeMs(&info->stateTime) < 0) + if (virTimeMillisNow(&info->stateTime) < 0) goto cleanup; info->stateTime -= priv->monStart; } @@ -8446,7 +8447,7 @@ static int qemuDomainGetJobInfo(virDomainPtr dom, * of incoming migration which we don't currently * monitor actively in the background thread */ - if (virTimeMs(&info->timeElapsed) < 0) + if (virTimeMillisNow(&info->timeElapsed) < 0) goto cleanup; info->timeElapsed -= priv->job.start; } else { diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 4fd2e9f..8fbf7b4 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -42,6 +42,7 @@ #include "datatypes.h" #include "fdstream.h" #include "uuid.h" +#include "virtime.h" #include "locking/domain_lock.h" #include "rpc/virnetsocket.h" @@ -790,7 +791,7 @@ qemuMigrationUpdateJobStatus(struct qemud_driver *driver, &memTotal); qemuDomainObjExitMonitorWithDriver(driver, vm); - if (ret < 0 || virTimeMs(&priv->job.info.timeElapsed) < 0) { + if (ret < 0 || virTimeMillisNow(&priv->job.info.timeElapsed) < 0) { priv->job.info.type = VIR_DOMAIN_JOB_FAILED; return -1; } @@ -1003,7 +1004,7 @@ qemuMigrationPrepareAny(struct qemud_driver *driver, qemuMigrationCookiePtr mig = NULL; bool tunnel = !!st; - if (virTimeMs(&now) < 0) + if (virTimeMillisNow(&now) < 0) return -1; if (!(def = virDomainDefParseString(driver->caps, dom_xml, diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index c8f22e2..1b895f6 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -60,6 +60,7 @@ #include "locking/domain_lock.h" #include "network/bridge_driver.h" #include "uuid.h" +#include "virtime.h" #define VIR_FROM_THIS VIR_FROM_QEMU @@ -845,7 +846,7 @@ qemuConnectMonitor(struct qemud_driver *driver, virDomainObjPtr vm) * deleted while the monitor is active */ virDomainObjRef(vm); - ignore_value(virTimeMs(&priv->monStart)); + ignore_value(virTimeMillisNow(&priv->monStart)); virDomainObjUnlock(vm); qemuDriverUnlock(driver); @@ -3012,7 +3013,7 @@ int qemuProcessStart(virConnectPtr conn, goto cleanup; } - if ((timestamp = virTimestamp()) == NULL) { + if ((timestamp = virTimeStringNow()) == NULL) { virReportOOMError(); goto cleanup; } else { @@ -3290,7 +3291,7 @@ void qemuProcessStop(struct qemud_driver *driver, VIR_WARN("Unable to open logfile: %s", virStrerror(errno, ebuf, sizeof ebuf)); } else { - if ((timestamp = virTimestamp()) == NULL) { + if ((timestamp = virTimeStringNow()) == NULL) { virReportOOMError(); } else { if (safewrite(logfile, timestamp, strlen(timestamp)) < 0 || @@ -3560,7 +3561,7 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED, priv->persistentAddrs = 0; } - if ((timestamp = virTimestamp()) == NULL) { + if ((timestamp = virTimeStringNow()) == NULL) { virReportOOMError(); goto cleanup; } else { diff --git a/src/util/event_poll.c b/src/util/event_poll.c index e8679b8..97118d9 100644 --- a/src/util/event_poll.c +++ b/src/util/event_poll.c @@ -39,6 +39,7 @@ #include "virfile.h" #include "ignore-value.h" #include "virterror_internal.h" +#include "virtime.h" #define EVENT_DEBUG(fmt, ...) VIR_DEBUG(fmt, __VA_ARGS__) @@ -206,8 +207,9 @@ int virEventPollAddTimeout(int frequency, { unsigned long long now; int ret; + EVENT_DEBUG("Adding timer %d with %d ms freq", nextTimer, frequency); - if (virTimeMs(&now) < 0) { + if (virTimeMillisNow(&now) < 0) { return -1; } @@ -249,7 +251,7 @@ void virEventPollUpdateTimeout(int timer, int frequency) return; } - if (virTimeMs(&now) < 0) { + if (virTimeMillisNow(&now) < 0) { return; } @@ -322,7 +324,7 @@ static int virEventPollCalculateTimeout(int *timeout) { if (then > 0) { unsigned long long now; - if (virTimeMs(&now) < 0) + if (virTimeMillisNow(&now) < 0) return -1; *timeout = then - now; @@ -398,7 +400,7 @@ static int virEventPollDispatchTimeouts(void) int ntimeouts = eventLoop.timeoutsCount; VIR_DEBUG("Dispatch %d", ntimeouts); - if (virTimeMs(&now) < 0) + if (virTimeMillisNow(&now) < 0) return -1; for (i = 0 ; i < ntimeouts ; i++) { diff --git a/src/util/util.c b/src/util/util.c index 1ff287d..9b30f1e 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -33,12 +33,10 @@ #include #include #include -#include #include #include #include #include -#include #if HAVE_MMAP # include #endif @@ -2402,57 +2400,6 @@ int virBuildPathInternal(char **path, ...) return ret; } -/** - * virTimestamp: - * - * Return an allocated string containing the current date and time, - * followed by ": ". Return NULL on allocation failure. - */ -char * -virTimestamp(void) -{ - struct timeval cur_time; - struct tm time_info; - char timestr[100]; - char *timestamp; - - gettimeofday(&cur_time, NULL); - localtime_r(&cur_time.tv_sec, &time_info); - - strftime(timestr, sizeof(timestr), "%Y-%m-%d %H:%M:%S", &time_info); - - if (virAsprintf(×tamp, "%s.%03d", - timestr, (int) cur_time.tv_usec / 1000) < 0) { - return NULL; - } - - return timestamp; -} - -#define timeval_to_ms(tv) (((tv).tv_sec * 1000ull) + ((tv).tv_usec / 1000)) - -/** - * virTimeMs: - * - * Get current time in milliseconds. - * - * Returns 0 on success, -1 on failure. - */ -int -virTimeMs(unsigned long long *ms) -{ - struct timeval now; - - if (gettimeofday(&now, NULL) < 0) { - virReportSystemError(errno, "%s", - _("cannot get time of day")); - return -1; - } - - *ms = timeval_to_ms(now); - return 0; -} - #if HAVE_LIBDEVMAPPER_H bool virIsDevMapperDevice(const char *dev_name) diff --git a/src/util/util.h b/src/util/util.h index c55e852..afa2221 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -251,10 +251,6 @@ void virFileWaitForDevices(void); # define virBuildPath(path, ...) virBuildPathInternal(path, __VA_ARGS__, NULL) int virBuildPathInternal(char **path, ...) ATTRIBUTE_SENTINEL; -char *virTimestamp(void); - -int virTimeMs(unsigned long long *ms) ATTRIBUTE_NONNULL(1); - bool virIsDevMapperDevice(const char *dev_name) ATTRIBUTE_NONNULL(1); int virEmitXMLWarning(int fd, -- 1.7.7.3