]> xenbits.xensource.com Git - libvirt.git/commitdiff
log error if virConnectCacheOnceInit() fails
authorLaine Stump <laine@redhat.com>
Tue, 26 Jan 2021 04:54:57 +0000 (23:54 -0500)
committerLaine Stump <laine@redhat.com>
Tue, 2 Feb 2021 05:27:27 +0000 (00:27 -0500)
virGetConnectNetwork() calls
 virGetConnectGeneric(), which calls
  virConnecCacheInitialize(), which is actually a call (only once) to
   virConnectCacheOnceInit() which calls
    virThreadLocalInit() several times, which calls
     pthread_key_create()

If pthread_key_create() fails, it (of course) doesn't log an error
(because it's not a part of libvirt), nor does any other function on
the call chain all the way up to virGetConnectNetwork(). But none of
the callers of virGetConnectNetwork() log an error either, so it is
possible that an API could fail due to virGetConnectNetwork() failing,
but would only log "an error was encountered, but the cause is
unknown. Deal with it."  (paraphrasing).

(In all likelyhood, virConnectCacheOnceInit() is going to be called at
some earlier time, and almost certainly pthread_key_create() will
never fail (and if it does, the user will have *much* bigger problems
than an obtuse error message from libvirt)).

Signed-off-by: Laine Stump <laine@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/driver.c

index e005a89d57f7bf5ab3beb2f595588770f2fcb1fc..f0970d9bbc4d9f45e7fd6be818e1cfd3f7f3c917 100644 (file)
@@ -116,18 +116,17 @@ virThreadLocal connectStorage;
 static int
 virConnectCacheOnceInit(void)
 {
-    if (virThreadLocalInit(&connectInterface, NULL) < 0)
-        return -1;
-    if (virThreadLocalInit(&connectNetwork, NULL) < 0)
-        return -1;
-    if (virThreadLocalInit(&connectNWFilter, NULL) < 0)
-        return -1;
-    if (virThreadLocalInit(&connectNodeDev, NULL) < 0)
-        return -1;
-    if (virThreadLocalInit(&connectSecret, NULL) < 0)
-        return -1;
-    if (virThreadLocalInit(&connectStorage, NULL) < 0)
+    if (virThreadLocalInit(&connectInterface, NULL) < 0 ||
+        virThreadLocalInit(&connectNetwork, NULL) < 0 ||
+        virThreadLocalInit(&connectNWFilter, NULL) < 0 ||
+        virThreadLocalInit(&connectNodeDev, NULL) < 0 ||
+        virThreadLocalInit(&connectSecret, NULL) < 0 ||
+        virThreadLocalInit(&connectStorage, NULL) < 0) {
+        virReportSystemError(errno, "%s",
+                             _("Unable to initialize thread local variable"));
         return -1;
+    }
+
     return 0;
 }