[Spice-devel] [PATCH 06/18] worker: move display_channel_wait_for_migrate_data
Frediano Ziglio
fziglio at redhat.com
Wed Nov 18 08:17:25 PST 2015
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
More information about the Spice-devel
mailing list