net/colo-compare.c: Check that colo-compare is active
commit45942b79b9f89b42a5f5ccfa861c36a86a95d89a
authorLukas Straub <lukasstraub2@web.de>
Fri, 22 May 2020 07:53:55 +0000 (22 15:53 +0800)
committerJason Wang <jasowang@redhat.com>
Thu, 18 Jun 2020 13:05:52 +0000 (18 21:05 +0800)
treeb883d75105b47c5bd649af713f9c18c65885532c
parent76658541f3950e580ae3be8019f1b4c019a8a638
net/colo-compare.c: Check that colo-compare is active

If the colo-compare object is removed before failover and a
checkpoint happens, qemu crashes because it tries to lock
the destroyed event_mtx in colo_notify_compares_event.

Fix this by checking if everything is initialized by
introducing a new variable colo_compare_active which
is protected by a new mutex colo_compare_mutex. The new mutex
also protects against concurrent access of the net_compares
list and makes sure that colo_notify_compares_event isn't
active while we destroy event_mtx and event_complete_cond.

With this it also is again possible to use colo without
colo-compare (periodic mode) and to use multiple colo-compare
for multiple network interfaces.

Signed-off-by: Lukas Straub <lukasstraub2@web.de>
Tested-by: Lukas Straub <lukasstraub2@web.de>
Reviewed-by: Zhang Chen <chen.zhang@intel.com>
Signed-off-by: Zhang Chen <chen.zhang@intel.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
net/colo-compare.c