net/colo-compare.c: Correct ordering in complete and finalize
In colo_compare_complete, insert CompareState into net_compares only after everything has been initialized. In colo_compare_finalize, remove CompareState from net_compares before anything is deinitialized. Signed-off-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>
This commit is contained in:
parent
45942b79b9
commit
5bd57eba04
@ -1283,15 +1283,6 @@ static void colo_compare_complete(UserCreatable *uc, Error **errp)
|
||||
s->vnet_hdr);
|
||||
}
|
||||
|
||||
qemu_mutex_lock(&colo_compare_mutex);
|
||||
if (!colo_compare_active) {
|
||||
qemu_mutex_init(&event_mtx);
|
||||
qemu_cond_init(&event_complete_cond);
|
||||
colo_compare_active = true;
|
||||
}
|
||||
QTAILQ_INSERT_TAIL(&net_compares, s, next);
|
||||
qemu_mutex_unlock(&colo_compare_mutex);
|
||||
|
||||
s->out_sendco.s = s;
|
||||
s->out_sendco.chr = &s->chr_out;
|
||||
s->out_sendco.notify_remote_frame = false;
|
||||
@ -1314,6 +1305,16 @@ static void colo_compare_complete(UserCreatable *uc, Error **errp)
|
||||
connection_destroy);
|
||||
|
||||
colo_compare_iothread(s);
|
||||
|
||||
qemu_mutex_lock(&colo_compare_mutex);
|
||||
if (!colo_compare_active) {
|
||||
qemu_mutex_init(&event_mtx);
|
||||
qemu_cond_init(&event_complete_cond);
|
||||
colo_compare_active = true;
|
||||
}
|
||||
QTAILQ_INSERT_TAIL(&net_compares, s, next);
|
||||
qemu_mutex_unlock(&colo_compare_mutex);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1382,19 +1383,6 @@ static void colo_compare_finalize(Object *obj)
|
||||
CompareState *s = COLO_COMPARE(obj);
|
||||
CompareState *tmp = NULL;
|
||||
|
||||
qemu_chr_fe_deinit(&s->chr_pri_in, false);
|
||||
qemu_chr_fe_deinit(&s->chr_sec_in, false);
|
||||
qemu_chr_fe_deinit(&s->chr_out, false);
|
||||
if (s->notify_dev) {
|
||||
qemu_chr_fe_deinit(&s->chr_notify_dev, false);
|
||||
}
|
||||
|
||||
if (s->iothread) {
|
||||
colo_compare_timer_del(s);
|
||||
}
|
||||
|
||||
qemu_bh_delete(s->event_bh);
|
||||
|
||||
qemu_mutex_lock(&colo_compare_mutex);
|
||||
QTAILQ_FOREACH(tmp, &net_compares, next) {
|
||||
if (tmp == s) {
|
||||
@ -1409,6 +1397,19 @@ static void colo_compare_finalize(Object *obj)
|
||||
}
|
||||
qemu_mutex_unlock(&colo_compare_mutex);
|
||||
|
||||
qemu_chr_fe_deinit(&s->chr_pri_in, false);
|
||||
qemu_chr_fe_deinit(&s->chr_sec_in, false);
|
||||
qemu_chr_fe_deinit(&s->chr_out, false);
|
||||
if (s->notify_dev) {
|
||||
qemu_chr_fe_deinit(&s->chr_notify_dev, false);
|
||||
}
|
||||
|
||||
if (s->iothread) {
|
||||
colo_compare_timer_del(s);
|
||||
}
|
||||
|
||||
qemu_bh_delete(s->event_bh);
|
||||
|
||||
AioContext *ctx = iothread_get_aio_context(s->iothread);
|
||||
aio_context_acquire(ctx);
|
||||
AIO_WAIT_WHILE(ctx, !s->out_sendco.done);
|
||||
|
Loading…
Reference in New Issue
Block a user