• E
    rpc: avoid libvirtd crash on unexpected client close · 4e006b84
    Eric Blake 提交于
    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.
    4e006b84
virnetserverclient.c 25.9 KB