From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:56225) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R6kSM-0007jE-PY for qemu-devel@nongnu.org; Thu, 22 Sep 2011 10:41:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1R6kSF-0004KT-Eb for qemu-devel@nongnu.org; Thu, 22 Sep 2011 10:40:54 -0400 Received: from mx1.redhat.com ([209.132.183.28]:55197) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R6kSE-0004KK-Si for qemu-devel@nongnu.org; Thu, 22 Sep 2011 10:40:47 -0400 Date: Thu, 22 Sep 2011 17:38:32 +0300 From: Alon Levy Message-ID: <20110922143832.GF2875@bow.tlv.redhat.com> References: <1316620283-8330-1-git-send-email-yhalperi@redhat.com> <1316620283-8330-13-git-send-email-yhalperi@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1316620283-8330-13-git-send-email-yhalperi@redhat.com> Subject: Re: [Qemu-devel] [PATCH spice-server 12/13] server: fall back to switch host scheme in case semi-seamless connection to target fails List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Yonit Halperin Cc: qemu-devel@nongnu.org, spice-devel@freedesktop.org, kraxel@redhat.com On Wed, Sep 21, 2011 at 06:51:22PM +0300, Yonit Halperin wrote: > > Signed-off-by: Yonit Halperin > --- > server/reds.c | 18 +++++++++++++----- > 1 files changed, 13 insertions(+), 5 deletions(-) > > diff --git a/server/reds.c b/server/reds.c > index 76aa0ed..54c06d1 100644 > --- a/server/reds.c > +++ b/server/reds.c > @@ -283,6 +283,7 @@ typedef struct RedsState { > int mig_wait_disconnect; > int mig_wait_prev_complete; > int mig_inprogress; > + int mig_connect_ok; > int expect_migrate; > int mig_target; > RedsMigSpice *mig_spice; > @@ -1736,6 +1737,7 @@ static void reds_main_handle_message(void *opaque, size_t size, uint32_t type, v > case SPICE_MSGC_MAIN_MIGRATE_CONNECTED: > red_printf("client connected to migration target"); > if (reds->mig_wait_connect) { > + reds->mig_connect_ok = TRUE; > reds_mig_cleanup(); > } > break; > @@ -1743,6 +1745,7 @@ static void reds_main_handle_message(void *opaque, size_t size, uint32_t type, v > // TODO: fall into switch host in case of connect error or timeout So this is no longer true? > red_printf("mig connect error"); > if (reds->mig_wait_connect) { > + reds->mig_connect_ok = FALSE; > reds_mig_cleanup(); > } > break; > @@ -2172,6 +2175,7 @@ static void reds_handle_main_link(RedLinkInfo *link) > reds->mig_inprogress = FALSE; > reds->mig_wait_connect = FALSE; > reds->mig_wait_disconnect = FALSE; > + reds->mig_connect_ok = FALSE; > reds->stream = link->stream; > reds->in_handler.shut = FALSE; > > @@ -4151,8 +4155,6 @@ static void reds_mig_connect(void) > > reds_push_pipe_item(item); > > - reds_mig_release(); > - > reds->mig_wait_connect = TRUE; > core->timer_start(reds->mig_timer, MIGRATE_TIMEOUT); > } > @@ -4194,6 +4196,7 @@ static void reds_mig_started(void) > > reds_listen_stop(); > sif = SPICE_CONTAINEROF(migration_interface->base.sif, SpiceMigrateInterface, base); > + reds->mig_connect_ok = FALSE; > > if (reds->stream == NULL) { > red_printf("not connected to stream"); > @@ -4227,7 +4230,7 @@ static void reds_mig_finished(int completed) > RedsOutItem *item; > > red_printf(""); > - > + reds_mig_release(); > if (reds->stream == NULL) { > red_printf("no stream connected"); > return; > @@ -4298,7 +4301,12 @@ static void migrate_timeout(void *opaque) > { > red_printf(""); > ASSERT(reds->mig_wait_connect || reds->mig_wait_disconnect || reds->mig_wait_prev_complete); > - reds_mig_disconnect(); > + if (reds->mig_wait_connect) { > + reds->mig_connect_ok = FALSE; > + reds_mig_cleanup(); > + } else { > + reds_mig_disconnect(); > + } > } > > static void key_modifiers_sender(void *opaque) > @@ -5188,7 +5196,7 @@ SPICE_GNUC_VISIBLE int spice_server_migrate_end(SpiceServer *s, int completed) > goto complete; > } > > - if (reds->client_semi_mig_cap) { > + if (reds->client_semi_mig_cap && reds->mig_connect_ok) { > reds_mig_finished(completed); > } else { > ret = spice_server_migrate_switch(s); > -- > 1.7.4.4 >