From: "Daniel P. Berrange" <berrange(a)redhat.com>
Remove the use of a manually run virLogStartup and
virNodeSuspendInitialize methods. Instead make sure they
are automatically run using VIR_ONCE_GLOBAL_INIT
Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
daemon/libvirtd.c | 1 -
src/libvirt.c | 4 +---
src/libvirt_private.syms | 3 ---
src/util/logging.c | 54 +++++++++++++--------------------------------
src/util/logging.h | 2 --
src/util/virnodesuspend.c | 25 +++++++++++----------
src/util/virnodesuspend.h | 1 -
7 files changed, 29 insertions(+), 61 deletions(-)
diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c
index 8c434a0..79f37ae 100644
--- a/daemon/libvirtd.c
+++ b/daemon/libvirtd.c
@@ -1331,7 +1331,6 @@ cleanup:
VIR_FREE(run_dir);
daemonConfigFree(config);
- virLogShutdown();
return ret;
}
diff --git a/src/libvirt.c b/src/libvirt.c
index db6ba15..c6640b2 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -41,7 +41,6 @@
#include "conf.h"
#include "rpc/virnettlscontext.h"
#include "command.h"
-#include "virnodesuspend.h"
#include "virrandom.h"
#include "viruri.h"
@@ -395,8 +394,7 @@ virInitialize(void)
if (virThreadInitialize() < 0 ||
virErrorInitialize() < 0 ||
- virRandomInitialize(time(NULL) ^ getpid()) ||
- virNodeSuspendInit() < 0)
+ virRandomInitialize(time(NULL) ^ getpid()))
return -1;
gcry_control(GCRYCTL_SET_THREAD_CBS, &virTLSThreadImpl);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 6625fc6..e22b133 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -756,8 +756,6 @@ virLogReset;
virLogSetBufferSize;
virLogSetDefaultPriority;
virLogSetFromEnv;
-virLogShutdown;
-virLogStartup;
virLogUnlock;
@@ -1491,7 +1489,6 @@ virNetTLSSessionSetIOCallbacks;
# virnodesuspend.h
nodeSuspendForDuration;
-virNodeSuspendInit;
virNodeSuspendGetTargetMask;
diff --git a/src/util/logging.c b/src/util/logging.c
index f8233cd..59b455e 100644
--- a/src/util/logging.c
+++ b/src/util/logging.c
@@ -147,25 +147,14 @@ static const char *virLogPriorityString(virLogPriority lvl) {
return "unknown";
}
-static int virLogInitialized = 0;
-/**
- * virLogStartup:
- *
- * Initialize the logging module
- *
- * Returns 0 if successful, and -1 in case or error
- */
-int virLogStartup(void) {
+static int virLogOnceInit(void)
+{
const char *pbm = NULL;
- if (virLogInitialized)
- return -1;
-
if (virMutexInit(&virLogMutex) < 0)
return -1;
- virLogInitialized = 1;
virLogLock();
if (VIR_ALLOC_N(virLogBuffer, virLogSize + 1) < 0) {
/*
@@ -191,6 +180,8 @@ int virLogStartup(void) {
return 0;
}
+VIR_ONCE_GLOBAL_INIT(virLog)
+
/**
* virLogSetBufferSize:
* @size: size of the buffer in kilobytes or <= 0 to deactivate
@@ -211,7 +202,10 @@ virLogSetBufferSize(int size) {
if (size < 0)
size = 0;
- if ((virLogInitialized == 0) || (size * 1024 == virLogSize))
+ if (virLogInitialize() < 0)
+ return -1;
+
+ if (size * 1024 == virLogSize)
return ret;
virLogLock();
@@ -253,8 +247,8 @@ error:
* Returns 0 if successful, and -1 in case or error
*/
int virLogReset(void) {
- if (!virLogInitialized)
- return virLogStartup();
+ if (virLogInitialize() < 0)
+ return -1;
virLogLock();
virLogResetFilters();
@@ -266,25 +260,6 @@ int virLogReset(void) {
virLogUnlock();
return 0;
}
-/**
- * virLogShutdown:
- *
- * Shutdown the logging module
- */
-void virLogShutdown(void) {
- if (!virLogInitialized)
- return;
- virLogLock();
- virLogResetFilters();
- virLogResetOutputs();
- virLogLen = 0;
- virLogStart = 0;
- virLogEnd = 0;
- VIR_FREE(virLogBuffer);
- virLogUnlock();
- virMutexDestroy(&virLogMutex);
- virLogInitialized = 0;
-}
/*
* Store a string in the ring buffer
@@ -450,8 +425,9 @@ int virLogSetDefaultPriority(int priority) {
VIR_WARN("Ignoring invalid log level setting.");
return -1;
}
- if (!virLogInitialized)
- virLogStartup();
+ if (virLogInitialize() < 0)
+ return -1;
+
virLogDefaultPriority = priority;
return 0;
}
@@ -723,8 +699,8 @@ void virLogVMessage(const char *category, int priority, const char
*funcname,
int emit = 1;
unsigned int filterflags = 0;
- if (!virLogInitialized)
- virLogStartup();
+ if (virLogInitialize() < 0)
+ return;
if (fmt == NULL)
goto cleanup;
diff --git a/src/util/logging.h b/src/util/logging.h
index 70318d0..d02cda7 100644
--- a/src/util/logging.h
+++ b/src/util/logging.h
@@ -125,9 +125,7 @@ extern int virLogDefineOutput(virLogOutputFunc f, virLogCloseFunc c,
void *data,
extern void virLogLock(void);
extern void virLogUnlock(void);
-extern int virLogStartup(void);
extern int virLogReset(void);
-extern void virLogShutdown(void);
extern int virLogParseDefaultPriority(const char *priority);
extern int virLogParseFilters(const char *filters);
extern int virLogParseOutputs(const char *output);
diff --git a/src/util/virnodesuspend.c b/src/util/virnodesuspend.c
index 7e37118..d7a67c0 100644
--- a/src/util/virnodesuspend.c
+++ b/src/util/virnodesuspend.c
@@ -64,24 +64,19 @@ static void virNodeSuspendUnlock(void)
}
-/**
- * virNodeSuspendInit:
- *
- * Get the system-wide sleep states supported by the host, such as
- * Suspend-to-RAM, Suspend-to-Disk, or Hybrid-Suspend, so that a request
- * to suspend/hibernate the host can be handled appropriately based on
- * this information.
- *
- * Returns 0 if successful, and -1 in case of error.
- */
-int virNodeSuspendInit(void)
+static int virNodeSuspendOnceInit(void)
{
- if (virMutexInit(&virNodeSuspendMutex) < 0)
+ if (virMutexInit(&virNodeSuspendMutex) < 0) {
+ virNodeSuspendError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("Unable to initialize mutex"));
return -1;
+ }
return 0;
}
+VIR_ONCE_GLOBAL_INIT(virNodeSuspend)
+
/**
* virNodeSuspendSetNodeWakeup:
@@ -187,6 +182,9 @@ int nodeSuspendForDuration(virConnectPtr conn ATTRIBUTE_UNUSED,
virCheckFlags(0, -1);
+ if (virNodeSuspendInitialize() < 0)
+ return -1;
+
if (virNodeSuspendGetTargetMask(&supported) < 0)
return -1;
@@ -273,6 +271,9 @@ virNodeSuspendSupportsTarget(unsigned int target, bool *supported)
int status;
int ret = -1;
+ if (virNodeSuspendInitialize() < 0)
+ return -1;
+
*supported = false;
switch (target) {
diff --git a/src/util/virnodesuspend.h b/src/util/virnodesuspend.h
index 5debde2..f1ee4bc 100644
--- a/src/util/virnodesuspend.h
+++ b/src/util/virnodesuspend.h
@@ -30,7 +30,6 @@ int nodeSuspendForDuration(virConnectPtr conn,
unsigned long long duration,
unsigned int flags);
-int virNodeSuspendInit(void);
int virNodeSuspendGetTargetMask(unsigned int *bitmask);
#endif /* __VIR_NODE_SUSPEND_H__ */
--
1.7.10.2