On 2011-07-20 18:34, Marcelo Tosatti wrote: > On Tue, Jul 19, 2011 at 11:48:22PM +0200, Jan Kiszka wrote: >> On 2011-07-19 13:46, Michael Tokarev wrote: >>> If we do, it results in double monitor_resume() (second being called >>> from migrate_fd_cleanup() anyway) and monitor suspend count becoming >>> negative. >>> >>> Cc'ing people from `git blame' list for the lines in question: the >>> change fixes the problem but I'm not sure what the original intention >>> of this code was in this place. Unfortunately noone replied to two >>> my attempts to raise this issue. >>> >>> Signed-Off-By: Michael Tokarev <m...@tls.msk.ru> >>> --- >>> migration.c | 3 --- >>> 1 files changed, 0 insertions(+), 3 deletions(-) >>> >>> diff --git a/migration.c b/migration.c >>> index af3a1f2..115588c 100644 >>> --- a/migration.c >>> +++ b/migration.c >>> @@ -330,9 +330,6 @@ ssize_t migrate_fd_put_buffer(void *opaque, const void >>> *data, size_t size) >>> if (ret == -EAGAIN) { >>> qemu_set_fd_handler2(s->fd, NULL, NULL, migrate_fd_put_notify, s); >>> } else if (ret < 0) { >>> - if (s->mon) { >>> - monitor_resume(s->mon); >>> - } >>> s->state = MIG_STATE_ERROR; >>> notifier_list_notify(&migration_state_notifiers); >>> } >> >> Looks reasonable to me, but Marcelo should comment on this, specifically >> which scenario once required the resume. >> >> Jan > > If the monitor was suspended (migrate without -d), then this path must > resume. Should record that somewhere and check here.
It's clear that we need to resume. The question is in which case migrate_fd_cleanup may not be called after an error in migrate_fd_put_buffer. Jan
signature.asc
Description: OpenPGP digital signature