[PATCH 1/2] rpc: Fix deadlock if there is no worker pool available

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

 



@srv must be unlocked for the call virNetServerProcessMsg otherwise a
deadlock can occur.

Signed-off-by: Marc Hartmayer <mhartmay@xxxxxxxxxxxxx>
Reviewed-by: Boris Fiuczynski <fiuczy@xxxxxxxxxxxxx>
---
 src/rpc/virnetserver.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c
index 5c7f7dd08f..5ae809e372 100644
--- a/src/rpc/virnetserver.c
+++ b/src/rpc/virnetserver.c
@@ -201,7 +201,7 @@ static void virNetServerDispatchNewMessage(virNetServerClientPtr client,
         virNetServerJobPtr job;
 
         if (VIR_ALLOC(job) < 0)
-            goto error;
+            goto error_unlock;
 
         job->client = client;
         job->msg = msg;
@@ -216,20 +216,23 @@ static void virNetServerDispatchNewMessage(virNetServerClientPtr client,
             virObjectUnref(client);
             VIR_FREE(job);
             virObjectUnref(prog);
-            goto error;
+            goto error_unlock;
         }
+        virObjectUnlock(srv);
     } else {
+        /* @srv must be unlocked for virNetServerProcessMsg */
+        virObjectUnlock(srv);
         if (virNetServerProcessMsg(srv, client, prog, msg) < 0)
             goto error;
     }
 
-    virObjectUnlock(srv);
     return;
 
+ error_unlock:
+    virObjectUnlock(srv);
  error:
     virNetMessageFree(msg);
     virNetServerClientClose(client);
-    virObjectUnlock(srv);
 }
 
 /**
-- 
2.13.6

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux