<div dir="ltr">Ok, I'll check it out. <div><br></div><div>Look like your patch is still not in master branch。May you commit it? I'll check out it and test for force console case</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Michal Privoznik <<a href="mailto:mprivozn@redhat.com" target="_blank">mprivozn@redhat.com</a>> 于2019年11月25日周一 下午10:12写道:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 11/25/19 11:53 AM, Lance Liu wrote:<br>
> We first produce this bug in rhel7.4's libvir daemon。For easily <br>
> produce the bug, the step can be as follows: 1. add sleep(3)  in <br>
> daemonStreamFilter() pre virMutexLock(&stream->priv->lock), then <br>
> build libvirtd bin executable, then restart libvirtd 2. use virsh <br>
> console open one vm's console, for this console(the vm's kernel need <br>
> console=ttyS0 boot parameter,then just  input from keyboard on and on<br>
> 3. use virsh console --force to break the previous console session,<br>
> than you will get libvirt daemon deadlock。<br>
> <br>
> And for the problem client->privData to be released problem, only <br>
> virNetServerClientClose() will free client->privData and client, I <br>
> think this can be fixed by remove virNetServerClientClose() from <br>
> daemonStreamEvent(), and replace with <br>
> virNetServerClientImmediateClose(), so virNetServerProcessClients() <br>
> will test the session would be closed。<br>
<br>
RHEL-7.4 you say? That's libvirt-3.2.0 which is far from what we have on<br>
the master. Also, RHEL-7.4 itself is kind of old as RHEL-7.7 was<br>
released during summer. At least that explains why your original patch<br>
was against older libvirt.<br>
<br>
When I revert your patch I can see the deadlock still happening:<br>
<br>
Thread 5 (Thread 0x7feac8936700 (LWP 162328)):<br>
#0  0x00007feacd1d6f6c in __lll_lock_wait () at /lib64/libpthread.so.0<br>
#1  0x00007feacd1cf194 in pthread_mutex_lock () at /lib64/libpthread.so.0<br>
#2  0x00007feacdc78a9e in virMutexLock (m=0x565030303700) at <br>
../../src/util/virthread.c:79<br>
#3  0x00007feacdc488a2 in virObjectLock (anyobj=0x5650303036f0) at <br>
../../src/util/virobject.c:433<br>
#4  0x00007feacdd9f8bc in virNetServerClientSendMessage <br>
(client=0x5650303036f0, msg=0x7feab40281e0) at <br>
../../src/rpc/virnetserverclient.c:1532<br>
#5  0x00007feacdd9ac27 in virNetServerProgramSendError <br>
(program=536903814, version=1, client=0x5650303036f0, <br>
msg=0x7feab40281e0, rerr=0x7feac8935730, procedure=201, type=3, <br>
serial=16) at ../../src/rpc/virnetserverprogram.c:168<br>
#6  0x00007feacdd9ad52 in virNetServerProgramSendStreamError <br>
(prog=0x5650302ccb70, client=0x5650303036f0, msg=0x7feab40281e0, <br>
rerr=0x7feac8935730, procedure=201, serial=16) at <br>
../../src/rpc/virnetserverprogram.c:217<br>
#7  0x000056502e9bbd24 in daemonStreamEvent (st=0x7feac40022a0, <br>
events=4, opaque=0x5650303036f0) at <br>
../../src/remote/remote_daemon_stream.c:256<br>
#8  0x00007feacdc01648 in virFDStreamCloseInt (st=0x7feac40022a0, <br>
streamAbort=true) at ../../src/util/virfdstream.c:715<br>
#9  0x00007feacdc017d1 in virFDStreamAbort (st=0x7feac40022a0) at <br>
../../src/util/virfdstream.c:759<br>
#10 0x00007feacded9e1d in virStreamAbort (stream=0x7feac40022a0) at <br>
../../src/libvirt-stream.c:1237<br>
#11 0x00007feacdd456e3 in virChrdevOpen (devs=0x7fea740cae00, <br>
source=0x7fea740d26a0, st=0x7feab402f220, force=true) at <br>
../../src/conf/virchrdev.c:387<br>
#12 0x00007feab3f722e7 in qemuDomainOpenConsole (dom=0x7feab40329b0, <br>
dev_name=0x0, st=0x7feab402f220, flags=1) at <br>
../../src/qemu/qemu_driver.c:17309<br>
#13 0x00007feacdeb375f in virDomainOpenConsole (dom=0x7feab40329b0, <br>
dev_name=0x0, st=0x7feab402f220, flags=1) at ../../src/libvirt-domain.c:9662<br>
#14 0x000056502e999894 in remoteDispatchDomainOpenConsole <br>
(server=0x56503027fc30, client=0x56503031ad70, msg=0x565030304eb0, <br>
rerr=0x7feac8935ad0, args=0x7feab402cd70) at <br>
./remote/remote_daemon_dispatch_stubs.h:9211<br>
#15 0x000056502e99976f in remoteDispatchDomainOpenConsoleHelper <br>
(server=0x56503027fc30, client=0x56503031ad70, msg=0x565030304eb0, <br>
rerr=0x7feac8935ad0, args=0x7feab402cd70, ret=0x0) at <br>
./remote/remote_daemon_dispatch_stubs.h:9178<br>
#16 0x00007feacdd9b4b1 in virNetServerProgramDispatchCall <br>
(prog=0x5650302ccb70, server=0x56503027fc30, client=0x56503031ad70, <br>
msg=0x565030304eb0) at ../../src/rpc/virnetserverprogram.c:430<br>
#17 0x00007feacdd9b026 in virNetServerProgramDispatch <br>
(prog=0x5650302ccb70, server=0x56503027fc30, client=0x56503031ad70, <br>
msg=0x565030304eb0) at ../../src/rpc/virnetserverprogram.c:302<br>
#18 0x00007feacdda1e34 in virNetServerProcessMsg (srv=0x56503027fc30, <br>
client=0x56503031ad70, prog=0x5650302ccb70, msg=0x565030304eb0) at <br>
../../src/rpc/virnetserver.c:136<br>
#19 0x00007feacdda1ef4 in virNetServerHandleJob <br>
(jobOpaque=0x565030336ea0, opaque=0x56503027fc30) at <br>
../../src/rpc/virnetserver.c:153<br>
#20 0x00007feacdc79800 in virThreadPoolWorker (opaque=0x56503028a1f0) at <br>
../../src/util/virthreadpool.c:163<br>
#21 0x00007feacdc78dad in virThreadHelper (data=0x56503028afd0) at <br>
../../src/util/virthread.c:196<br>
#22 0x00007feacd1cc458 in start_thread () at /lib64/libpthread.so.0<br>
#23 0x00007feacd0fa6ef in clone () at /lib64/libc.so.6<br>
<br>
<br>
Thread 1 (Thread 0x7feaca8a7dc0 (LWP 162311)):<br>
#0  0x00007feacd1d6f6c in __lll_lock_wait () at /lib64/libpthread.so.0<br>
#1  0x00007feacd1cf194 in pthread_mutex_lock () at /lib64/libpthread.so.0<br>
#2  0x00007feacdc78a9e in virMutexLock (m=0x5650302ff110) at <br>
../../src/util/virthread.c:79<br>
#3  0x000056502e9bbde3 in daemonStreamFilter (client=0x5650303036f0, <br>
msg=0x5650303097d0, opaque=0x7feac4003020) at <br>
../../src/remote/remote_daemon_stream.c:297<br>
#4  0x00007feacdd9f03b in virNetServerClientDispatchRead <br>
(client=0x5650303036f0) at ../../src/rpc/virnetserverclient.c:1288<br>
#5  0x00007feacdd9f6ab in virNetServerClientDispatchEvent <br>
(sock=0x565030309a90, events=1, opaque=0x5650303036f0) at <br>
../../src/rpc/virnetserverclient.c:1485<br>
#6  0x00007feacdd907f9 in virNetSocketEventHandle (watch=19, fd=28, <br>
events=1, opaque=0x565030309a90) at ../../src/rpc/virnetsocket.c:2177<br>
#7  0x00007feacdbff32d in virEventPollDispatchHandles (nfds=16, <br>
fds=0x5650302bf200) at ../../src/util/vireventpoll.c:503<br>
#8  0x00007feacdbffb86 in virEventPollRunOnce () at <br>
../../src/util/vireventpoll.c:658<br>
#9  0x00007feacdbfdafb in virEventRunDefaultImpl () at <br>
../../src/util/virevent.c:322<br>
#10 0x00007feacdda1a0d in virNetDaemonRun (dmn=0x56503027f880) at <br>
../../src/rpc/virnetdaemon.c:836<br>
#11 0x000056502e98843f in main (argc=2, argv=0x7ffc308703a8) at <br>
../../src/remote/remote_daemon.c:1427<br>
<br>
<br>
But I think I have an idea how to fix this. Will post patches later today.<br>
<br>
Michal<br>
<br>
</blockquote></div></div>