[Spice-devel] [spice-server v3] reds: Close sockets when failing to watch them

Uri Lublin uril at redhat.com
Thu Mar 8 13:54:56 UTC 2018


On 03/08/2018 03:23 PM, Christophe Fergeau wrote:
> Currently if we fail to set up the watch waiting for accept() to be
> called on the socket, we still keep the network socket(s) open even if we
> are not going to be able to use it. This commit makes sure it's closed a
> set to -1 when such a failure occurs rather than having a half
> initialized spice-server instance.

Ack.

I see below you removed some log-messages.
Perhaps it would be better to just change their messages.

Uri.


> ---
>   server/reds.c | 33 ++++++++++++++++++++-------------
>   1 file changed, 20 insertions(+), 13 deletions(-)
> 
> diff --git a/server/reds.c b/server/reds.c
> index a31ed4e96..8ccb5e0e4 100644
> --- a/server/reds.c
> +++ b/server/reds.c
> @@ -2584,6 +2584,24 @@ void reds_set_client_mm_time_latency(RedsState *reds, RedClient *client, uint32_
>       }
>   }
>   
> +static void reds_cleanup_net(SpiceServer *reds)
> +{
> +    if (reds->listen_socket != -1) {
> +       reds_core_watch_remove(reds, reds->listen_watch);
> +       if (reds->config->spice_listen_socket_fd != reds->listen_socket) {
> +          close(reds->listen_socket);
> +       }
> +       reds->listen_watch = NULL;
> +       reds->listen_socket = -1;
> +    }
> +    if (reds->secure_listen_socket != -1) {
> +       reds_core_watch_remove(reds, reds->secure_listen_watch);
> +       close(reds->secure_listen_socket);
> +       reds->secure_listen_watch = NULL;
> +       reds->secure_listen_socket = -1;
> +    }
> +}
> +
>   static int reds_init_net(RedsState *reds)
>   {
>       if (reds->config->spice_port != -1 || reds->config->spice_family == AF_UNIX) {
> @@ -2595,7 +2613,6 @@ static int reds_init_net(RedsState *reds)
>                                                    SPICE_WATCH_EVENT_READ,
>                                                    reds_accept, reds);
>           if (reds->listen_watch == NULL) {
> -            spice_warning("set fd handle failed");
>               return -1;
>           }
>       }
> @@ -2610,7 +2627,6 @@ static int reds_init_net(RedsState *reds)
>                                                           SPICE_WATCH_EVENT_READ,
>                                                           reds_accept_ssl_connection, reds);
>           if (reds->secure_listen_watch == NULL) {
> -            spice_warning("set fd handle failed");
>               return -1;
>           }
>       }
> @@ -2621,7 +2637,6 @@ static int reds_init_net(RedsState *reds)
>                                                    SPICE_WATCH_EVENT_READ,
>                                                    reds_accept, reds);
>           if (reds->listen_watch == NULL) {
> -            spice_warning("set fd handle failed");
>               return -1;
>           }
>       }
> @@ -3373,6 +3388,7 @@ static int do_spice_init(RedsState *reds, SpiceCoreInterface *core_interface)
>       return 0;
>   
>   err:
> +    reds_cleanup_net(reds);
>       return -1;
>   }
>   
> @@ -3632,16 +3648,7 @@ SPICE_GNUC_VISIBLE void spice_server_destroy(SpiceServer *reds)
>       if (reds->main_dispatcher) {
>           g_object_unref(reds->main_dispatcher);
>       }
> -    if (reds->listen_socket != -1) {
> -       reds_core_watch_remove(reds, reds->listen_watch);
> -       if (reds->config->spice_listen_socket_fd != reds->listen_socket) {
> -          close(reds->listen_socket);
> -       }
> -    }
> -    if (reds->secure_listen_socket != -1) {
> -       reds_core_watch_remove(reds, reds->secure_listen_watch);
> -       close(reds->secure_listen_socket);
> -    }
> +    reds_cleanup_net(reds);
>       g_clear_object(&reds->agent_dev);
>       spice_buffer_free(&reds->client_monitors_config);
>       red_record_unref(reds->record);
> 



More information about the Spice-devel mailing list