[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