Remove manual one-shot global initializers

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>
This commit is contained in:
Daniel P. Berrange 2012-07-11 14:35:42 +01:00
parent fbe871263c
commit b49890de82
7 changed files with 29 additions and 61 deletions

View File

@ -1349,7 +1349,6 @@ cleanup:
VIR_FREE(run_dir); VIR_FREE(run_dir);
daemonConfigFree(config); daemonConfigFree(config);
virLogShutdown();
return ret; return ret;
} }

View File

@ -53,7 +53,6 @@
#include "conf.h" #include "conf.h"
#include "rpc/virnettlscontext.h" #include "rpc/virnettlscontext.h"
#include "command.h" #include "command.h"
#include "virnodesuspend.h"
#include "virrandom.h" #include "virrandom.h"
#include "viruri.h" #include "viruri.h"
@ -410,8 +409,7 @@ virInitialize(void)
if (virThreadInitialize() < 0 || if (virThreadInitialize() < 0 ||
virErrorInitialize() < 0 || virErrorInitialize() < 0 ||
virRandomInitialize(time(NULL) ^ getpid()) || virRandomInitialize(time(NULL) ^ getpid()))
virNodeSuspendInit() < 0)
return -1; return -1;
gcry_control(GCRYCTL_SET_THREAD_CBS, &virTLSThreadImpl); gcry_control(GCRYCTL_SET_THREAD_CBS, &virTLSThreadImpl);

View File

@ -762,8 +762,6 @@ virLogReset;
virLogSetBufferSize; virLogSetBufferSize;
virLogSetDefaultPriority; virLogSetDefaultPriority;
virLogSetFromEnv; virLogSetFromEnv;
virLogShutdown;
virLogStartup;
virLogUnlock; virLogUnlock;
@ -1609,7 +1607,6 @@ virNetTLSSessionWrite;
# virnodesuspend.h # virnodesuspend.h
nodeSuspendForDuration; nodeSuspendForDuration;
virNodeSuspendInit;
virNodeSuspendGetTargetMask; virNodeSuspendGetTargetMask;

View File

@ -147,25 +147,14 @@ static const char *virLogPriorityString(virLogPriority lvl) {
return "unknown"; return "unknown";
} }
static int virLogInitialized = 0;
/** static int virLogOnceInit(void)
* virLogStartup: {
*
* Initialize the logging module
*
* Returns 0 if successful, and -1 in case or error
*/
int virLogStartup(void) {
const char *pbm = NULL; const char *pbm = NULL;
if (virLogInitialized)
return -1;
if (virMutexInit(&virLogMutex) < 0) if (virMutexInit(&virLogMutex) < 0)
return -1; return -1;
virLogInitialized = 1;
virLogLock(); virLogLock();
if (VIR_ALLOC_N(virLogBuffer, virLogSize + 1) < 0) { if (VIR_ALLOC_N(virLogBuffer, virLogSize + 1) < 0) {
/* /*
@ -191,6 +180,8 @@ int virLogStartup(void) {
return 0; return 0;
} }
VIR_ONCE_GLOBAL_INIT(virLog)
/** /**
* virLogSetBufferSize: * virLogSetBufferSize:
* @size: size of the buffer in kilobytes or <= 0 to deactivate * @size: size of the buffer in kilobytes or <= 0 to deactivate
@ -211,7 +202,10 @@ virLogSetBufferSize(int size) {
if (size < 0) if (size < 0)
size = 0; size = 0;
if ((virLogInitialized == 0) || (size * 1024 == virLogSize)) if (virLogInitialize() < 0)
return -1;
if (size * 1024 == virLogSize)
return ret; return ret;
virLogLock(); virLogLock();
@ -253,8 +247,8 @@ error:
* Returns 0 if successful, and -1 in case or error * Returns 0 if successful, and -1 in case or error
*/ */
int virLogReset(void) { int virLogReset(void) {
if (!virLogInitialized) if (virLogInitialize() < 0)
return virLogStartup(); return -1;
virLogLock(); virLogLock();
virLogResetFilters(); virLogResetFilters();
@ -266,25 +260,6 @@ int virLogReset(void) {
virLogUnlock(); virLogUnlock();
return 0; 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 * Store a string in the ring buffer
@ -450,8 +425,9 @@ int virLogSetDefaultPriority(int priority) {
VIR_WARN("Ignoring invalid log level setting."); VIR_WARN("Ignoring invalid log level setting.");
return -1; return -1;
} }
if (!virLogInitialized) if (virLogInitialize() < 0)
virLogStartup(); return -1;
virLogDefaultPriority = priority; virLogDefaultPriority = priority;
return 0; return 0;
} }
@ -723,8 +699,8 @@ void virLogVMessage(const char *category, int priority, const char *funcname,
int emit = 1; int emit = 1;
unsigned int filterflags = 0; unsigned int filterflags = 0;
if (!virLogInitialized) if (virLogInitialize() < 0)
virLogStartup(); return;
if (fmt == NULL) if (fmt == NULL)
goto cleanup; goto cleanup;

View File

@ -135,9 +135,7 @@ extern int virLogDefineOutput(virLogOutputFunc f, virLogCloseFunc c, void *data,
extern void virLogLock(void); extern void virLogLock(void);
extern void virLogUnlock(void); extern void virLogUnlock(void);
extern int virLogStartup(void);
extern int virLogReset(void); extern int virLogReset(void);
extern void virLogShutdown(void);
extern int virLogParseDefaultPriority(const char *priority); extern int virLogParseDefaultPriority(const char *priority);
extern int virLogParseFilters(const char *filters); extern int virLogParseFilters(const char *filters);
extern int virLogParseOutputs(const char *output); extern int virLogParseOutputs(const char *output);

View File

@ -59,24 +59,19 @@ static void virNodeSuspendUnlock(void)
} }
/** static int virNodeSuspendOnceInit(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)
{ {
if (virMutexInit(&virNodeSuspendMutex) < 0) if (virMutexInit(&virNodeSuspendMutex) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Unable to initialize mutex"));
return -1; return -1;
}
return 0; return 0;
} }
VIR_ONCE_GLOBAL_INIT(virNodeSuspend)
/** /**
* virNodeSuspendSetNodeWakeup: * virNodeSuspendSetNodeWakeup:
@ -182,6 +177,9 @@ int nodeSuspendForDuration(virConnectPtr conn ATTRIBUTE_UNUSED,
virCheckFlags(0, -1); virCheckFlags(0, -1);
if (virNodeSuspendInitialize() < 0)
return -1;
if (virNodeSuspendGetTargetMask(&supported) < 0) if (virNodeSuspendGetTargetMask(&supported) < 0)
return -1; return -1;
@ -268,6 +266,9 @@ virNodeSuspendSupportsTarget(unsigned int target, bool *supported)
int status; int status;
int ret = -1; int ret = -1;
if (virNodeSuspendInitialize() < 0)
return -1;
*supported = false; *supported = false;
switch (target) { switch (target) {

View File

@ -30,7 +30,6 @@ int nodeSuspendForDuration(virConnectPtr conn,
unsigned long long duration, unsigned long long duration,
unsigned int flags); unsigned int flags);
int virNodeSuspendInit(void);
int virNodeSuspendGetTargetMask(unsigned int *bitmask); int virNodeSuspendGetTargetMask(unsigned int *bitmask);
#endif /* __VIR_NODE_SUSPEND_H__ */ #endif /* __VIR_NODE_SUSPEND_H__ */