Re: [PATCH] fix bug libvirt daemon deadlock when another force console break down an existed console client when this deadlock hanppened, libvirtd backtrace as follow, a typical ABBA deadlock circumstance:

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

 



On 11/19/19 12:39 PM, LanceLiu wrote:
(gdb) thread 23
[Switching to thread 23 (Thread 0x7fbb54810700 (LWP 296966))]
(gdb) bt
     at rpc/virnetserverclient.c:1503
     client=client@entry=0x5641d20e20a0, msg=0x7fbb08003ab0, rerr=rerr@entry=0x7fbb5480f7b0, procedure=201,
     type=type@entry=3, serial=9) at rpc/virnetserverprogram.c:173
     msg=<optimized out>, rerr=rerr@entry=0x7fbb5480f7b0, procedure=<optimized out>, serial=<optimized out>)
     at rpc/virnetserverprogram.c:222
     opaque=opaque@entry=0x5641d20e20a0) at stream.c:246
     force=force@entry=true) at conf/virchrdev.c:386
     at qemu/qemu_driver.c:16188
     st=st@entry=0x7fbb08008fc0, flags=1) at libvirt-domain.c:9363
     rerr=0x7fbb5480fc10, msg=<optimized out>, client=0x5641d20e4e80) at remote_dispatch.h:8540
     rerr=0x7fbb5480fc10, args=0x7fbb08005eb0, ret=<optimized out>) at remote_dispatch.h:8505
     server=0x5641d20be420, prog=0x5641d20da580) at rpc/virnetserverprogram.c:437
     msg=0x5641d20e9a20) at rpc/virnetserverprogram.c:307
     srv=0x5641d20be420) at rpc/virnetserver.c:148
---Type <return> to continue, or q <return> to quit---

(gdb) thread 26
[Switching to thread 26 (Thread 0x7fbb87a378c0 (LWP 295636))]
(gdb) bt
     at stream.c:286
     at rpc/virnetserverclient.c:1247
     at rpc/virnetserverclient.c:1457
     at util/vireventpoll.c:508

Signed-off-by: LanceLiu <liu.lance.89@xxxxxxxxx>
---
  src/remote/remote_daemon_stream.c | 4 +++-
  1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/remote/remote_daemon_stream.c b/src/remote/remote_daemon_stream.c
index 1f6e783..b27348f 100644
--- a/src/remote/remote_daemon_stream.c
+++ b/src/remote/remote_daemon_stream.c
@@ -284,14 +284,16 @@ daemonStreamEvent(virStreamPtr st, int events, void *opaque)
   * -1 on fatal client error
   */
  static int
-daemonStreamFilter(virNetServerClientPtr client ATTRIBUTE_UNUSED,
+daemonStreamFilter(virNetServerClientPtr client,

This does not look rebased onto current git HEAD ;-) "Luckily", the problem you're fixing is still there.

                     virNetMessagePtr msg,
                     void *opaque)
  {
      daemonClientStream *stream = opaque;
      int ret = 0;
+ virObjectUnlock(client);
      virMutexLock(&stream->priv->lock);
+    virObjectLock(client);
if (msg->header.type != VIR_NET_STREAM &&
          msg->header.type != VIR_NET_STREAM_HOLE)


I've reworded the commit message, put a comment to virNetServerClientFilterFunc() typedef, ACKed and pushed.

Congratulations on your first libvirt contribution!

Michal

--
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