[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] [PATCH 01/13] Remove manual one-shot global initializers



From: "Daniel P. Berrange" <berrange 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 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 ffbe067..ba0cc1f 100644
--- a/daemon/libvirtd.c
+++ b/daemon/libvirtd.c
@@ -1349,7 +1349,6 @@ cleanup:
     VIR_FREE(run_dir);
 
     daemonConfigFree(config);
-    virLogShutdown();
 
     return ret;
 }
diff --git a/src/libvirt.c b/src/libvirt.c
index 8e789be..4368b99 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -53,7 +53,6 @@
 #include "conf.h"
 #include "rpc/virnettlscontext.h"
 #include "command.h"
-#include "virnodesuspend.h"
 #include "virrandom.h"
 #include "viruri.h"
 
@@ -407,8 +406,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 ac392fe..8b9e2c0 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -761,8 +761,6 @@ virLogReset;
 virLogSetBufferSize;
 virLogSetDefaultPriority;
 virLogSetFromEnv;
-virLogShutdown;
-virLogStartup;
 virLogUnlock;
 
 
@@ -1608,7 +1606,6 @@ virNetTLSSessionWrite;
 
 # virnodesuspend.h
 nodeSuspendForDuration;
-virNodeSuspendInit;
 virNodeSuspendGetTargetMask;
 
 
diff --git a/src/util/logging.c b/src/util/logging.c
index 73e7eb6..a7f6b65 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 d2bedcf..137bad2 100644
--- a/src/util/logging.h
+++ b/src/util/logging.h
@@ -135,9 +135,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 91dfdf6..914ce56 100644
--- a/src/util/virnodesuspend.c
+++ b/src/util/virnodesuspend.c
@@ -59,24 +59,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) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("Unable to initialize mutex"));
         return -1;
+    }
 
     return 0;
 }
 
+VIR_ONCE_GLOBAL_INIT(virNodeSuspend)
+
 
 /**
  * virNodeSuspendSetNodeWakeup:
@@ -182,6 +177,9 @@ int nodeSuspendForDuration(virConnectPtr conn ATTRIBUTE_UNUSED,
 
     virCheckFlags(0, -1);
 
+    if (virNodeSuspendInitialize() < 0)
+        return -1;
+
     if (virNodeSuspendGetTargetMask(&supported) < 0)
         return -1;
 
@@ -268,6 +266,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 a6927ac..76497d8 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.4


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]