From e4a969092bda5b3b952963fdf6658895165040b7 Mon Sep 17 00:00:00 2001 From: John Ferlan Date: Thu, 25 Jul 2013 08:01:02 -0400 Subject: [PATCH] Separate out StateAutoStart from StateInitialize Separation allows for dependent drivers to be make a connection during the AutoStart phase of state initialization. --- src/driver.h | 4 ++++ src/libvirt.c | 14 +++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/driver.h b/src/driver.h index cc03e9f768..be643338a9 100644 --- a/src/driver.h +++ b/src/driver.h @@ -1800,6 +1800,9 @@ typedef int virStateInhibitCallback callback, void *opaque); +typedef void +(*virDrvStateAutoStart)(void); + typedef int (*virDrvStateCleanup)(void); @@ -1815,6 +1818,7 @@ typedef virStateDriver *virStateDriverPtr; struct _virStateDriver { const char *name; virDrvStateInitialize stateInitialize; + virDrvStateAutoStart stateAutoStart; virDrvStateCleanup stateCleanup; virDrvStateReload stateReload; virDrvStateStop stateStop; diff --git a/src/libvirt.c b/src/libvirt.c index 444c1c3293..815748806a 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -808,7 +808,11 @@ virRegisterStateDriver(virStateDriverPtr driver) * @callback: callback to invoke to inhibit shutdown of the daemon * @opaque: data to pass to @callback * - * Initialize all virtualization drivers. + * Initialize all virtualization drivers. Accomplished in two phases, + * the first being state and structure initialization followed by any + * auto start supported by the driver. This is done to ensure dependencies + * that some drivers may have on another driver having been initialized + * will exist, such as the storage driver's need to use the secret driver. * * Returns 0 if all succeed, -1 upon any failure. */ @@ -836,6 +840,14 @@ int virStateInitialize(bool privileged, } } } + + for (i = 0; i < virStateDriverTabCount; i++) { + if (virStateDriverTab[i]->stateAutoStart) { + VIR_DEBUG("Running global auto start for %s state driver", + virStateDriverTab[i]->name); + virStateDriverTab[i]->stateAutoStart(); + } + } return 0; }