]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
daemon: Autodetect lock driver directory
authorJiri Denemark <jdenemar@redhat.com>
Tue, 21 Aug 2012 13:21:47 +0000 (15:21 +0200)
committerJiri Denemark <jdenemar@redhat.com>
Tue, 21 Aug 2012 16:05:19 +0000 (18:05 +0200)
When running libvirtd from a build directory, libvirtd would load lock
drivers from system directory unless explicitly overridden by setting
LIBVIRT_LOCK_MANAGER_PLUGIN_DIR environment variable. Since we already
autodetect driver directory if libvirt is build with driver modules, we
can use the same trick to automagically set lock driver directory.

daemon/libvirtd.c
src/libvirt_private.syms
src/locking/lock_manager.c
src/locking/lock_manager.h

index f0b0a3c3d753ee6867cb7cace01ceeab65107c2a..5245740795865425a38909340f7f876b3116aff2 100644 (file)
@@ -55,6 +55,7 @@
 #include "hooks.h"
 #include "uuid.h"
 #include "viraudit.h"
+#include "locking/lock_manager.h"
 
 #ifdef WITH_DRIVER_MODULES
 # include "driver.h"
@@ -971,7 +972,6 @@ int main(int argc, char **argv) {
     /* initialize early logging */
     virLogSetFromEnv();
 
-#ifdef WITH_DRIVER_MODULES
     if (strstr(argv[0], "lt-libvirtd") ||
         strstr(argv[0], "/daemon/.libs/libvirtd")) {
         char *tmp = strrchr(argv[0], '/');
@@ -990,11 +990,13 @@ int main(int argc, char **argv) {
                     argv[0], driverdir);
             exit(EXIT_FAILURE);
         }
+        virLockManagerSetPluginDir(driverdir);
+#ifdef WITH_DRIVER_MODULES
         virDriverModuleInitialize(driverdir);
+#endif
         *tmp = '/';
         /* Must not free 'driverdir' - it is still used */
     }
-#endif
 
     while (1) {
         int optidx = 0;
index 4cfa95f06a6df2ee1abacee9db3c8fd47ec8d315..e2d6d275f2cfbefba9ee78f636ac6270849816a1 100644 (file)
@@ -757,6 +757,7 @@ virLockManagerPluginUnref;
 virLockManagerPluginUsesState;
 virLockManagerPluginGetName;
 virLockManagerRelease;
+virLockManagerSetPluginDir;
 
 
 # logging.h
index 1d9c1bfd6c1e70b5c5e6a79990f644f9a1e9eeb7..068327f50ad96b63eac37d07fe917ff7b26c11b6 100644 (file)
@@ -64,6 +64,16 @@ struct _virLockManagerPlugin {
 
 #define DEFAULT_LOCK_MANAGER_PLUGIN_DIR LIBDIR "/libvirt/lock-driver"
 
+static const char *virLockManagerPluginDir = DEFAULT_LOCK_MANAGER_PLUGIN_DIR;
+
+void
+virLockManagerSetPluginDir(const char *dir)
+{
+    if (dir)
+        virLockManagerPluginDir = dir;
+}
+
+
 static void virLockManagerLogParams(size_t nparams,
                                     virLockManagerParamPtr params)
 {
@@ -128,7 +138,7 @@ virLockManagerPluginPtr virLockManagerPluginNew(const char *name,
         driver = &virLockDriverNop;
     } else {
         if (moddir == NULL)
-            moddir = DEFAULT_LOCK_MANAGER_PLUGIN_DIR;
+            moddir = virLockManagerPluginDir;
 
         VIR_DEBUG("Module load %s from %s", name, moddir);
 
index 25c7f7f96dc5ade53283a1ac6229263fc123c022..6a779f0fc5a706b45a3c61560a147760a15fdff9 100644 (file)
@@ -28,6 +28,7 @@
 typedef struct _virLockManagerPlugin virLockManagerPlugin;
 typedef virLockManagerPlugin *virLockManagerPluginPtr;
 
+void virLockManagerSetPluginDir(const char *dir);
 virLockManagerPluginPtr virLockManagerPluginNew(const char *name,
                                                 const char *configFile,
                                                 unsigned int flags);