[Spice-devel] [PATCH 06/18] worker: move display_channel_wait_for_migrate_data

Frediano Ziglio fziglio at redhat.com
Thu Nov 19 04:45:43 PST 2015


> 
> On Wed, Nov 18, 2015 at 5:17 PM, Frediano Ziglio <fziglio at redhat.com> wrote:
> > From: Marc-André Lureau <marcandre.lureau at gmail.com>
> >
> > ---
> >  server/display-channel.c | 31 +++++++++++++++++++++++++++++++
> >  server/display-channel.h |  1 +
> >  server/red_worker.c      | 31 -------------------------------
> >  3 files changed, 32 insertions(+), 31 deletions(-)
> >
> > diff --git a/server/display-channel.c b/server/display-channel.c
> > index c671571..1702bd6 100644
> > --- a/server/display-channel.c
> > +++ b/server/display-channel.c
> > @@ -807,3 +807,34 @@ int display_channel_add_drawable(DisplayChannel
> > *display, Drawable *drawable)
> >
> >      return ret;
> >  }
> > +
> > +int display_channel_wait_for_migrate_data(DisplayChannel *display)
> > +{
> > +    uint64_t end_time = red_get_monotonic_time() +
> > DISPLAY_CLIENT_MIGRATE_DATA_TIMEOUT;
> > +    RedChannel *channel = &display->common.base;
> > +    RedChannelClient *rcc;
> > +
> > +    spice_debug(NULL);
> > +    spice_assert(channel->clients_num == 1);
> > +
> > +    rcc = SPICE_CONTAINEROF(ring_get_head(&channel->clients),
> > RedChannelClient, channel_link);
> > +    spice_assert(red_channel_client_waits_for_migrate_data(rcc));
> > +
> > +    for (;;) {
> > +        red_channel_client_receive(rcc);
> > +        if (!red_channel_client_is_connected(rcc)) {
> > +            break;
> > +        }
> > +
> > +        if (!red_channel_client_waits_for_migrate_data(rcc)) {
> > +            return TRUE;
> > +        }
> > +        if (red_get_monotonic_time() > end_time) {
> > +            spice_warning("timeout");
> > +            red_channel_client_disconnect(rcc);
> > +            break;
> > +        }
> > +        usleep(DISPLAY_CLIENT_RETRY_INTERVAL);
> > +    }
> > +    return FALSE;
> > +}
> > diff --git a/server/display-channel.h b/server/display-channel.h
> > index ae55114..5f5bc51 100644
> > --- a/server/display-channel.h
> > +++ b/server/display-channel.h
> > @@ -267,6 +267,7 @@ int                        display_channel_add_drawable
> > (DisplayCha
> >                                                                        Drawable
> >                                                                        *drawable);
> >  void                       display_channel_current_flush
> >  (DisplayChannel *display,
> >                                                                        int
> >                                                                        surface_id);
> > +int                        display_channel_wait_for_migrate_data
> > (DisplayChannel *display);
> >
> >  static inline int is_equal_path(SpicePath *path1, SpicePath *path2)
> >  {
> > diff --git a/server/red_worker.c b/server/red_worker.c
> > index a7baf0e..f7ba2d8 100644
> > --- a/server/red_worker.c
> > +++ b/server/red_worker.c
> > @@ -6916,37 +6916,6 @@ static void handle_dev_stop(void *opaque, void
> > *payload)
> >      }
> >  }
> >
> > -static int display_channel_wait_for_migrate_data(DisplayChannel *display)
> > -{
> > -    uint64_t end_time = red_get_monotonic_time() +
> > DISPLAY_CLIENT_MIGRATE_DATA_TIMEOUT;
> > -    RedChannel *channel = &display->common.base;
> > -    RedChannelClient *rcc;
> > -
> > -    spice_debug(NULL);
> > -    spice_assert(channel->clients_num == 1);
> > -
> > -    rcc = SPICE_CONTAINEROF(ring_get_head(&channel->clients),
> > RedChannelClient, channel_link);
> > -    spice_assert(red_channel_client_waits_for_migrate_data(rcc));
> > -
> > -    for (;;) {
> > -        red_channel_client_receive(rcc);
> > -        if (!red_channel_client_is_connected(rcc)) {
> > -            break;
> > -        }
> > -
> > -        if (!red_channel_client_waits_for_migrate_data(rcc)) {
> > -            return TRUE;
> > -        }
> > -        if (red_get_monotonic_time() > end_time) {
> > -            spice_warning("timeout");
> > -            red_channel_client_disconnect(rcc);
> > -            break;
> > -        }
> > -        usleep(DISPLAY_CLIENT_RETRY_INTERVAL);
> > -    }
> > -    return FALSE;
> > -}
> > -
> >  static void handle_dev_start(void *opaque, void *payload)
> >  {
> >      RedWorker *worker = opaque;
> > --
> > 2.4.3
> >
> > _______________________________________________
> > Spice-devel mailing list
> > Spice-devel at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/spice-devel
> 
> Patch seems fine, ACK!
> 
Merged

Frediano


More information about the Spice-devel mailing list