[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