On 12.11.2020 20:12, Michal Privoznik wrote:
> On 4/27/20 5:54 PM, Daniel P. Berrangé wrote:
>> We got a new BZ filed about a libvirtd crash in shutdown
>>
>>    https://bugzilla.redhat.com/show_bug.cgi?id=1828207
> 
> And there is another one:
> 
> https://bugzilla.redhat.com/show_bug.cgi?id=1895359
> 
> The problem is that when host is shutting down we get PrepareForShutdown() 
> signal on dbus and spawn a thread that will eventually call qemuStateStop(). 
> But before it gets a chance to run the main thread quits the event loop and 
> calls qemuStateCleanup() freeing the qemu driver. After all this the dbus 
> signal handling thread gets to run only to find qemu_driver=0x0 and thus 
> crash.
> 
> From the fact that the event loop quit I deduct that we were sent a SIGTERM 
> which means there was no guest running otherwise we would inhibit the 
> shutdown, so qemuStateStop() would be a NOP anyway. So maybe the fix for this 
> particular case indeed is to check whether qemu_driver == 0x0.
> 
> Anyway, I think your idea is sound.
> 


Hi, Michal.

I added code to handle shutdown as Dan proposed in [1]. It handles most busy 
threads which are rpc and worker and per-VM event loop
threads in qemu driver. But there are still other drivers and short living 
threads here and there [2]. So thread that spawns 
daemonStop is on of these untamed threads.

So we need to join this thread in daemonShutdownWait.

[1] [PATCH v2 00/13] resolve hangs/crashes on libvirtd shutdown
https://www.redhat.com/archives/libvir-list/2020-July/msg01606.html
[2] Re: [PATCH v2 00/13] resolve hangs/crashes on libvirtd shutdown
https://www.redhat.com/archives/libvir-list/2020-September/msg00319.html

Nikolay


Reply via email to