[Spice-devel] [PATCHv2 11/22] webdav: move initialization to session

Marc-André Lureau marcandre.lureau at redhat.com
Wed Nov 26 09:56:02 PST 2014


Use session accessors to initialize the webdav server
---
 gtk/channel-webdav.c     | 24 +++++-------------------
 gtk/spice-session-priv.h |  2 ++
 gtk/spice-session.c      | 23 +++++++++++++++++++++++
 3 files changed, 30 insertions(+), 19 deletions(-)

diff --git a/gtk/channel-webdav.c b/gtk/channel-webdav.c
index dbb8730..94f3ef3 100644
--- a/gtk/channel-webdav.c
+++ b/gtk/channel-webdav.c
@@ -694,19 +694,14 @@ end:
     g_object_unref(gaddr);
 }
 
-static PhodavServer* webdav_server_new(SpiceSession *session)
+G_GNUC_INTERNAL
+PhodavServer* channel_webdav_server_new(SpiceSession *session)
 {
     PhodavServer *dav;
     SoupServer *server;
     SoupSocket *listener;
-    int i;
-
-    g_warn_if_fail(!session->priv->webdav);
 
     dav = phodav_server_new(0, spice_session_get_shared_dir(session));
-    session->priv->webdav = dav;
-    for (i = 0; i < sizeof(session->priv->webdav_magic); i++)
-        session->priv->webdav_magic[i] = g_random_int_range(0, 255);
 
     server = phodav_server_get_soup_server(dav);
     listener = soup_server_get_listener(server);
@@ -723,21 +718,12 @@ static PhodavServer* phodav_server_get(SpiceSession *session, gint *port)
     g_return_val_if_fail(SPICE_IS_SESSION(session), NULL);
 
 #ifdef USE_PHODAV
-    PhodavServer *self = NULL;
-    static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
-
-    g_static_mutex_lock(&mutex);
-    self = session->priv->webdav;
-    if (self == NULL) {
-        self = webdav_server_new(session);
-        phodav_server_run(self);
-    }
-    g_static_mutex_unlock(&mutex);
+    PhodavServer *server = spice_session_get_webdav_server(session);
 
     if (port)
-        *port = phodav_server_get_port(self);
+        *port = phodav_server_get_port(server);
 
-    return self;
+    return server;
 #else
     g_return_val_if_reached(NULL);
 #endif
diff --git a/gtk/spice-session-priv.h b/gtk/spice-session-priv.h
index 95fc078..98c3f72 100644
--- a/gtk/spice-session-priv.h
+++ b/gtk/spice-session-priv.h
@@ -178,6 +178,8 @@ gboolean spice_session_get_smartcard_enabled(SpiceSession *session);
 gboolean spice_session_get_usbredir_enabled(SpiceSession *session);
 
 const guint8* spice_session_get_webdav_magic(SpiceSession *session);
+PhodavServer *spice_session_get_webdav_server(SpiceSession *session);
+PhodavServer* channel_webdav_server_new(SpiceSession *session);
 guint spice_session_get_n_display_channels(SpiceSession *session);
 void spice_session_set_main_channel(SpiceSession *session, SpiceChannel *channel);
 gboolean spice_session_set_migration_session(SpiceSession *session, SpiceSession *mig_session);
diff --git a/gtk/spice-session.c b/gtk/spice-session.c
index 5c1966e..2e837f2 100644
--- a/gtk/spice-session.c
+++ b/gtk/spice-session.c
@@ -2379,6 +2379,29 @@ const guint8* spice_session_get_webdav_magic(SpiceSession *session)
     return session->priv->webdav_magic;
 }
 
+G_GNUC_INTERNAL
+PhodavServer* spice_session_get_webdav_server(SpiceSession *session)
+{
+    g_return_val_if_fail(SPICE_IS_SESSION(session), NULL);
+
+#ifdef USE_PHODAV
+    static GStaticMutex mutex = G_STATIC_MUTEX_INIT;
+    int i;
+
+    g_static_mutex_lock(&mutex);
+    if (!session->priv->webdav) {
+        for (i = 0; i < sizeof(session->priv->webdav_magic); i++)
+            session->priv->webdav_magic[i] = g_random_int_range(0, 255);
+
+        session->priv->webdav = channel_webdav_server_new(session);
+        phodav_server_run(session->priv->webdav);
+    }
+    g_static_mutex_unlock(&mutex);
+#endif
+
+    return session->priv->webdav;
+}
+
 /**
  * spice_session_is_for_migration:
  * @session: a Spice session
-- 
2.1.0



More information about the Spice-devel mailing list