[Spice-commits] 4 commits - server/char-device.c server/inputs-channel.c server/main-channel-client.c server/main-channel.c server/main-channel.h server/red-channel.c server/red-channel.h server/reds.c

Frediano Ziglio fziglio at kemper.freedesktop.org
Wed Nov 30 17:37:21 UTC 2016


 server/char-device.c         |   20 ++++++++------------
 server/inputs-channel.c      |    5 ++---
 server/main-channel-client.c |    4 +---
 server/main-channel.c        |   10 ----------
 server/main-channel.h        |    1 -
 server/red-channel.c         |   14 --------------
 server/red-channel.h         |    2 --
 server/reds.c                |   16 +++++++++-------
 8 files changed, 20 insertions(+), 52 deletions(-)

New commits:
commit 8da22558b79ab31f6704b4022fcf3f4f6d966cd8
Author: Frediano Ziglio <fziglio at redhat.com>
Date:   Thu Nov 24 17:27:17 2016 +0000

    Allows reds_core_timer_remove to accept NULL for timer
    
    Most of the times the check is done externally
    so moving inside the function reduce the code.
    This is similar to the way free(3) works.
    
    Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
    Acked-by: Pavel Grunt <pgrunt at redhat.com>

diff --git a/server/char-device.c b/server/char-device.c
index 3b70066..45ce548 100644
--- a/server/char-device.c
+++ b/server/char-device.c
@@ -176,10 +176,8 @@ static void red_char_device_client_free(RedCharDevice *dev,
 {
     GList *l, *next;
 
-    if (dev_client->wait_for_tokens_timer) {
-        reds_core_timer_remove(dev->priv->reds, dev_client->wait_for_tokens_timer);
-        dev_client->wait_for_tokens_timer = NULL;
-    }
+    reds_core_timer_remove(dev->priv->reds, dev_client->wait_for_tokens_timer);
+    dev_client->wait_for_tokens_timer = NULL;
 
     g_queue_free_full(dev_client->send_queue, (GDestroyNotify)red_pipe_item_unref);
 
@@ -990,10 +988,9 @@ static void red_char_device_init_device_instance(RedCharDevice *self)
 
     g_return_if_fail(self->priv->reds);
 
-    if (self->priv->write_to_dev_timer) {
-        reds_core_timer_remove(self->priv->reds, self->priv->write_to_dev_timer);
-        self->priv->write_to_dev_timer = NULL;
-    }
+    reds_core_timer_remove(self->priv->reds, self->priv->write_to_dev_timer);
+    self->priv->write_to_dev_timer = NULL;
+
     if (self->priv->sin == NULL) {
        return;
     }
@@ -1081,10 +1078,9 @@ red_char_device_finalize(GObject *object)
 {
     RedCharDevice *self = RED_CHAR_DEVICE(object);
 
-    if (self->priv->write_to_dev_timer) {
-        reds_core_timer_remove(self->priv->reds, self->priv->write_to_dev_timer);
-        self->priv->write_to_dev_timer = NULL;
-    }
+    reds_core_timer_remove(self->priv->reds, self->priv->write_to_dev_timer);
+    self->priv->write_to_dev_timer = NULL;
+
     write_buffers_queue_free(&self->priv->write_queue);
     write_buffers_queue_free(&self->priv->write_bufs_pool);
     self->priv->cur_pool_size = 0;
diff --git a/server/inputs-channel.c b/server/inputs-channel.c
index 99c2888..bea0ddf 100644
--- a/server/inputs-channel.c
+++ b/server/inputs-channel.c
@@ -625,9 +625,8 @@ inputs_channel_finalize(GObject *object)
     InputsChannel *self = INPUTS_CHANNEL(object);
     RedsState *reds = red_channel_get_server(RED_CHANNEL(self));
 
-    if (self->key_modifiers_timer) {
-        reds_core_timer_remove(reds, self->key_modifiers_timer);
-    }
+    reds_core_timer_remove(reds, self->key_modifiers_timer);
+
     G_OBJECT_CLASS(inputs_channel_parent_class)->finalize(object);
 }
 
diff --git a/server/main-channel-client.c b/server/main-channel-client.c
index 576b31f..15e168d 100644
--- a/server/main-channel-client.c
+++ b/server/main-channel-client.c
@@ -189,9 +189,7 @@ static void main_channel_client_finalize(GObject *object)
     RedsState *reds =
         red_channel_get_server(red_channel_client_get_channel(RED_CHANNEL_CLIENT(object)));
 
-    if (self->priv->ping_timer) {
-        reds_core_timer_remove(reds, self->priv->ping_timer);
-    }
+    reds_core_timer_remove(reds, self->priv->ping_timer);
 #endif
     G_OBJECT_CLASS(main_channel_client_parent_class)->finalize(object);
 }
diff --git a/server/reds.c b/server/reds.c
index 5b18162..75f90c5 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -3594,9 +3594,7 @@ SPICE_GNUC_VISIBLE void spice_server_destroy(SpiceServer *reds)
     }
     reds_cleanup(reds);
 
-    if (reds->mig_timer) {
-        reds_core_timer_remove(reds, reds->mig_timer);
-    }
+    reds_core_timer_remove(reds, reds->mig_timer);
 
     /* remove the server from the list of servers so that we don't attempt to
      * free it again at exit */
@@ -4189,10 +4187,14 @@ void reds_core_timer_cancel(RedsState *reds,
 void reds_core_timer_remove(RedsState *reds,
                             SpiceTimer *timer)
 {
-   g_return_if_fail(reds != NULL);
-   g_return_if_fail(reds->core.timer_remove != NULL);
+    if (timer == NULL) {
+        return;
+    }
+
+    g_return_if_fail(reds != NULL);
+    g_return_if_fail(reds->core.timer_remove != NULL);
 
-   return reds->core.timer_remove(&reds->core, timer);
+    reds->core.timer_remove(&reds->core, timer);
 }
 
 void reds_update_client_mouse_allowed(RedsState *reds)
commit ab77c22ec5eab0bdcfd738e963ac435ece2ee205
Author: Frediano Ziglio <fziglio at redhat.com>
Date:   Fri Nov 18 05:39:39 2016 +0000

    Remove unused red_channel_get_first_socket
    
    This function assume there is only one client.
    Was used only by some obsolete functions.
    Avoid to use such function in the future.
    
    Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
    Acked-by: Pavel Grunt <pgrunt at redhat.com>

diff --git a/server/red-channel.c b/server/red-channel.c
index 0936548..fb2c8c1 100644
--- a/server/red-channel.c
+++ b/server/red-channel.c
@@ -611,20 +611,6 @@ int red_channel_any_blocked(RedChannel *channel)
     return FALSE;
 }
 
-int red_channel_get_first_socket(RedChannel *channel)
-{
-    RedChannelClient *rcc;
-    RedsStream *stream;
-
-    if (!channel || !channel->priv->clients) {
-        return -1;
-    }
-    rcc = g_list_nth_data(channel->priv->clients, 0);
-    stream = red_channel_client_get_stream(rcc);
-
-    return stream->socket;
-}
-
 int red_channel_no_item_being_sent(RedChannel *channel)
 {
     GListIter iter;
diff --git a/server/red-channel.h b/server/red-channel.h
index 0aa72c5..2c99139 100644
--- a/server/red-channel.h
+++ b/server/red-channel.h
@@ -262,8 +262,6 @@ void red_channel_pipes_add_type(RedChannel *channel, int pipe_item_type);
 
 void red_channel_pipes_add_empty_msg(RedChannel *channel, int msg_type);
 
-int red_channel_get_first_socket(RedChannel *channel);
-
 /* return TRUE if all of the connected clients to this channel are blocked */
 int red_channel_all_blocked(RedChannel *channel);
 
commit 97eee5a3527d6cf7fbeaf76a667449d025e8676d
Author: Frediano Ziglio <fziglio at redhat.com>
Date:   Fri Nov 18 05:35:46 2016 +0000

    Remove unused and obsolete main_channel_close
    
    This function wrongly close the first client.
    Wrongly as closing the file descriptor cause a dandling
    file descriptor in the object potentially leading
    to closing another file descriptor open later.
    
    Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
    Acked-by: Pavel Grunt <pgrunt at redhat.com>

diff --git a/server/main-channel.c b/server/main-channel.c
index a155419..24dd448 100644
--- a/server/main-channel.c
+++ b/server/main-channel.c
@@ -306,16 +306,6 @@ MainChannelClient *main_channel_link(MainChannel *channel, RedClient *client,
     return mcc;
 }
 
-// TODO: ? shouldn't it disconnect all clients? or shutdown all main_channels?
-void main_channel_close(MainChannel *main_chan)
-{
-    int socketfd;
-
-    if (main_chan && (socketfd = red_channel_get_first_socket(RED_CHANNEL(main_chan))) != -1) {
-        close(socketfd);
-    }
-}
-
 MainChannel* main_channel_new(RedsState *reds)
 {
     // TODO: set the migration flag of the channel
diff --git a/server/main-channel.h b/server/main-channel.h
index 019cf99..b70649c 100644
--- a/server/main-channel.h
+++ b/server/main-channel.h
@@ -61,7 +61,6 @@ RedClient *main_channel_get_client_by_link_id(MainChannel *main_chan, uint32_t l
 MainChannelClient *main_channel_link(MainChannel *, RedClient *client,
      RedsStream *stream, uint32_t link_id, int migration, int num_common_caps,
      uint32_t *common_caps, int num_caps, uint32_t *caps);
-void main_channel_close(MainChannel *main_chan); // not destroy, just socket close
 void main_channel_push_mouse_mode(MainChannel *main_chan, int current_mode, int is_client_mouse_allowed);
 void main_channel_push_agent_connected(MainChannel *main_chan);
 void main_channel_push_agent_disconnected(MainChannel *main_chan);
commit 311a79155d4fa149944c4f449276411a68781591
Author: Frediano Ziglio <fziglio at redhat.com>
Date:   Fri Nov 18 12:45:13 2016 +0000

    Use red_channel_destroy to free main_channel
    
    This will close all clients and release the channel properly
    
    Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
    Acked-by: Pavel Grunt <pgrunt at redhat.com>

diff --git a/server/reds.c b/server/reds.c
index eb99960..5b18162 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -3590,7 +3590,7 @@ SPICE_GNUC_VISIBLE void spice_server_destroy(SpiceServer *reds)
     g_array_unref(reds->config->video_codecs);
     free(reds->config);
     if (reds->main_channel) {
-        main_channel_close(reds->main_channel);
+        red_channel_destroy(RED_CHANNEL(reds->main_channel));
     }
     reds_cleanup(reds);
 


More information about the Spice-commits mailing list