]> git.ipfire.org Git - thirdparty/libvirt.git/commit
rpc: avoid libvirtd crash on unexpected client close
authorEric Blake <eblake@redhat.com>
Mon, 1 Aug 2011 19:41:38 +0000 (13:41 -0600)
committerEric Blake <eblake@redhat.com>
Tue, 2 Aug 2011 13:46:37 +0000 (07:46 -0600)
commit4e006b844f40e70a1ffdafe0115cd4277ad9916d
tree27042a95d14441737361ca7613e6e2aa291eac2c
parent22da8c941cc806a40cee69955ecb105f9b8e5a40
rpc: avoid libvirtd crash on unexpected client close

Steps to reproduce this problem (vm1 is not running):
for i in `seq 50`; do virsh managedsave vm1& done; killall virsh

Pre-patch, virNetServerClientClose could end up setting client->sock
to NULL prior to other cleanup functions trying to use client->sock.
This fixes things by checking for NULL in more places, and by deferring
the cleanup until after all queued messages have been served.

* src/rpc/virnetserverclient.c (virNetServerClientRegisterEvent)
(virNetServerClientGetFD, virNetServerClientIsSecure)
(virNetServerClientLocalAddrString)
(virNetServerClientRemoteAddrString): Check for closed socket.
(virNetServerClientClose): Rearrange close sequence.
Analysis from Wen Congyang.
src/rpc/virnetserverclient.c