[Spice-devel] [RFC PATCH spice 0.8 16/19] client: main channel migration: do partial cleanup when switching hosts
Yonit Halperin
yhalperi at redhat.com
Mon Sep 19 02:47:09 PDT 2011
Implement on_disconnect_mig_src and on_connect_mig_target in order to avoid
unnecessary cleanups done in on_(disconnet|connect).
In addition, do not request guest display settings changes after migration.
Signed-off-by: Yonit Halperin <yhalperi at redhat.com>
---
client/red_client.cpp | 37 ++++++++++++++++++++++++++-----------
client/red_client.h | 2 ++
2 files changed, 28 insertions(+), 11 deletions(-)
diff --git a/client/red_client.cpp b/client/red_client.cpp
index 51ed7b5..01a5d87 100644
--- a/client/red_client.cpp
+++ b/client/red_client.cpp
@@ -491,6 +491,15 @@ void RedClient::on_disconnect()
(*sync_event)->wait();
}
+void RedClient::on_disconnect_mig_src()
+{
+ _application.deactivate_interval_timer(*_agent_timer);
+ delete[] _agent_msg_data;
+ _agent_msg_data = NULL;
+ _agent_msg_pos = 0;
+ _agent_tokens = 0;
+}
+
void RedClient::delete_channels()
{
Lock lock(_channels_lock);
@@ -1032,7 +1041,9 @@ void RedClient::handle_init(RedPeer::InMessage* message)
LOG_INFO("");
_connection_id = init->session_id;
set_mm_time(init->multi_media_time);
- calc_pixmap_cach_and_glz_window_size(init->display_channels_hint, init->ram_hint);
+ if (!_during_migration) {
+ calc_pixmap_cach_and_glz_window_size(init->display_channels_hint, init->ram_hint);
+ }
set_mouse_mode(init->supported_mouse_modes, init->current_mouse_mode);
_agent_tokens = init->agent_tokens;
_agent_connected = !!init->agent_connected;
@@ -1043,20 +1054,24 @@ void RedClient::handle_init(RedPeer::InMessage* message)
_marshallers->msgc_main_agent_start(msg->marshaller(), &agent_start);
post_message(msg);
send_agent_announce_capabilities(true);
- if (_auto_display_res) {
- send_agent_monitors_config();
- }
+ if (!_during_migration) {
+ if (_auto_display_res) {
+ send_agent_monitors_config();
+ }
- if (_auto_display_res || !_display_setting.is_empty()) {
- _application.activate_interval_timer(*_agent_timer, AGENT_TIMEOUT);
- } else {
- send_main_attach_channels();
+ if (_auto_display_res || !_display_setting.is_empty()) {
+ _application.activate_interval_timer(*_agent_timer, AGENT_TIMEOUT);
+ } else {
+ send_main_attach_channels();
+ }
}
} else {
- if (_auto_display_res || !_display_setting.is_empty()) {
- LOG_WARN("no agent running, display options have been ignored");
+ if (!_during_migration) {
+ if (_auto_display_res || !_display_setting.is_empty()) {
+ LOG_WARN("no agent running, display options have been ignored");
+ }
+ send_main_attach_channels();
}
- send_main_attach_channels();
}
if (_during_migration) {
diff --git a/client/red_client.h b/client/red_client.h
index 6b9ffd1..8c33a85 100644
--- a/client/red_client.h
+++ b/client/red_client.h
@@ -279,6 +279,8 @@ protected:
virtual void on_connecting();
virtual void on_connect();
virtual void on_disconnect();
+ virtual void on_connect_mig_target() {}
+ virtual void on_disconnect_mig_src();
private:
void on_channel_disconnected(RedChannel& channel);
--
1.7.4.4
More information about the Spice-devel
mailing list