Re: Races / crashes in shutdown of libvirtd daemon

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

 




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





[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