[Spice-devel] [PATCH] Implement spice_server_set_exit_on_disconnect to enable an option whereby the spice server shuts down on client disconnect.

Jeremy White jwhite at codeweavers.com
Tue Aug 14 13:43:14 PDT 2012


---
 configure.ac             |    6 +++---
 server/reds.c            |   14 ++++++++++++++
 server/spice-server.syms |    4 ++++
 server/spice.h           |    1 +
 4 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/configure.ac b/configure.ac
index bed0464..2a74129 100644
--- a/configure.ac
+++ b/configure.ac
@@ -12,10 +12,10 @@ AC_PREREQ([2.57])
 
 m4_define([SPICE_MAJOR], 0)
 m4_define([SPICE_MINOR], 11)
-m4_define([SPICE_MICRO], 1)
-m4_define([SPICE_CURRENT], [3])
+m4_define([SPICE_MICRO], 2)
+m4_define([SPICE_CURRENT], [4])
 m4_define([SPICE_REVISION], [0])
-m4_define([SPICE_AGE], [2])
+m4_define([SPICE_AGE], [3])
 
 # Note on the library name on linux (SONAME) produced by libtool (for reference, gleaned
 # from looking at libtool 2.4.2)
diff --git a/server/reds.c b/server/reds.c
index e3ea154..fab6114 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -118,6 +118,7 @@ void *red_tunnel = NULL;
 #endif
 int agent_mouse = TRUE;
 int agent_copypaste = TRUE;
+static bool exit_on_disconnect = FALSE;
 
 #define MIGRATE_TIMEOUT (1000 * 10) /* 10sec */
 #define MM_TIMER_GRANULARITY_MS (1000 / 30)
@@ -630,6 +631,12 @@ void reds_client_disconnect(RedClient *client)
 {
     RedsMigTargetClient *mig_client;
 
+    if (exit_on_disconnect)
+    {
+        spice_info("Exiting server because of client disconnect.\n");
+        exit(0);
+    }
+
     if (!client || client->disconnecting) {
         return;
     }
@@ -3570,6 +3577,13 @@ SPICE_GNUC_VISIBLE int spice_server_set_listen_socket_fd(SpiceServer *s, int lis
     return 0;
 }
 
+SPICE_GNUC_VISIBLE int spice_server_set_exit_on_disconnect(SpiceServer *s, int flag)
+{
+    spice_assert(reds == s);
+    exit_on_disconnect = !!flag;
+    return 0;
+}
+
 SPICE_GNUC_VISIBLE int spice_server_set_noauth(SpiceServer *s)
 {
     spice_assert(reds == s);
diff --git a/server/spice-server.syms b/server/spice-server.syms
index a45951c..17c2024 100644
--- a/server/spice-server.syms
+++ b/server/spice-server.syms
@@ -116,3 +116,7 @@ SPICE_SERVER_0.10.3 {
 SPICE_SERVER_0.10.4 {
     spice_qxl_monitors_config_async;
 } SPICE_SERVER_0.10.3;
+
+SPICE_SERVER_0.11.1 {
+    spice_server_set_exit_on_disconnect
+} SPICE_SERVER_0.10.4;
diff --git a/server/spice.h b/server/spice.h
index 3d70ec7..30f4a8d 100644
--- a/server/spice.h
+++ b/server/spice.h
@@ -425,6 +425,7 @@ int spice_server_set_compat_version(SpiceServer *s,
 int spice_server_set_port(SpiceServer *s, int port);
 void spice_server_set_addr(SpiceServer *s, const char *addr, int flags);
 int spice_server_set_listen_socket_fd(SpiceServer *s, int listen_fd);
+int spice_server_set_exit_on_disconnect(SpiceServer *s, int flag);
 int spice_server_set_noauth(SpiceServer *s);
 int spice_server_set_sasl(SpiceServer *s, int enabled);
 int spice_server_set_sasl_appname(SpiceServer *s, const char *appname);
-- 
1.7.10.4




More information about the Spice-devel mailing list