src: replace clock_gettime()/gettimeofday() with g_get_real_time()

g_get_real_time() returns the time since epoch in microseconds.
It uses gettimeofday() internally while libvirt used clock_gettime
because it is declared async signal safe. In practice gettimeofday
is also async signal safe *provided* the timezone parameter is
NULL. This is indeed the case in g_get_real_time().

Reviewed-by: Fabiano Fidêncio <fidencio@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrangé
2020-01-03 15:42:13 +00:00
parent f7df985684
commit f5e9bdb87f
9 changed files with 39 additions and 105 deletions
+4 -7
View File
@@ -1286,11 +1286,10 @@ vshCommandRun(vshControl *ctl, const vshCmd *cmd)
bool ret = true;
while (cmd) {
struct timeval before, after;
gint64 before, after;
bool enable_timing = ctl->timing;
if (enable_timing)
GETTIMEOFDAY(&before);
before = g_get_real_time();
if ((cmd->def->flags & VSH_CMD_FLAG_NOCONNECT) ||
(hooks && hooks->connHandler && hooks->connHandler(ctl))) {
@@ -1300,8 +1299,7 @@ vshCommandRun(vshControl *ctl, const vshCmd *cmd)
ret = false;
}
if (enable_timing)
GETTIMEOFDAY(&after);
after = g_get_real_time();
/* try to automatically catch disconnections */
if (!ret &&
@@ -1321,8 +1319,7 @@ vshCommandRun(vshControl *ctl, const vshCmd *cmd)
return ret;
if (enable_timing) {
double diff_ms = (((after.tv_sec - before.tv_sec) * 1000.0) +
((after.tv_usec - before.tv_usec) / 1000.0));
double diff_ms = (after - before) / 1000.0;
vshPrint(ctl, _("\n(Time: %.3f ms)\n\n"), diff_ms);
} else {