Hi

----- Original Message -----
> From: Victor Toso <[email protected]>
> 
> This fixes a crash when spice_session_get_webdav_server() returns NULL
> which can easily happen if no shared folder is set.
> 
> We still lack a way to tell the Guest about the failure as it waits
> the data to mount the shared folder.
> 
> Log:
> > (spicy:20825): phodav-CRITICAL **: phodav_server_get_soup_server: assertion
> > 'PHODAV_IS_SERVER (self)' failed
> > (spicy:20825): GSpice-DEBUG: channel-webdav.c:368 webdav-11:0: starting
> > client
> > -1812687888
> >
> > (spicy:20825): GLib-GObject-CRITICAL **: g_type_instance_get_private:
> > assertion
> > 'instance != NULL && instance->g_class != NULL' failed
> >
> > Thread 1 "spicy" received signal SIGSEGV, Segmentation fault.
> > soup_server_accept_socket (server=server@entry=0x0,
> > sock=sock@entry=0x7f7670
> >
> > [SoupSocket]) at soup-server.c:1468
> > 1468            priv->clients = g_slist_prepend (priv->clients, client);
> 
> Backtrace:
> > (gdb) bt
> > #0  in soup_server_accept_socket (server=server@entry=0x0,
> >     sock=sock@entry=0x7f7670[SoupSocket]) at soup-server.c:1468
> > #1  in soup_server_accept_iostream (server=0x0,
> >     stream=0xb77890 [GSimpleIOStream], local_addr=<optimized out>,
> >     remote_addr=<optimized out>, error=<optimized out>) at
> >     soup-server.c:1515
> > #2  in start_client (self=0xa0a6e0 [SpiceWebdavChannel]) at
> > channel-webdav.c:382
> > #3  in data_read_cb (source_object=0x9d2e60 [SpiceVmcInputStream],
> >     res=0x9d0e80, user_data=0xa0a6e0) at channel-webdav.c:429
> > #4  in g_task_return_now (task=0x9d0e80 [GTask]) at gtask.c:1121
> > #5  in g_task_return (task=0x9d0e80 [GTask], type=<optimized out>) at
> > gtask.c:1179
> > #6  in complete_in_idle_cb (user_data=0x1233070) at vmcstream.c:110
> 
> Signed-off-by: Victor Toso <[email protected]>
> ---
>  src/channel-webdav.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/src/channel-webdav.c b/src/channel-webdav.c
> index 4a246b5..38de2fb 100644
> --- a/src/channel-webdav.c
> +++ b/src/channel-webdav.c
> @@ -361,9 +361,15 @@ static void start_client(SpiceWebdavChannel *self)
>      SoupServer *server;
>      GSocketAddress *addr;
>      GError *error = NULL;
> +    PhodavServer *phodav;
>  
>      session = spice_channel_get_session(SPICE_CHANNEL(self));
> -    server =
> phodav_server_get_soup_server(spice_session_get_webdav_server(session));
> +    phodav = spice_session_get_webdav_server(session);
> +    if (phodav == NULL) {
> +        CHANNEL_DEBUG(self, "failed to start client: no Phodav Server");
> +        return;
> +    }

So it seems it's going to repeat this debug over whenever it reads data from 
the channel. I wonder if we should rather return an "empty" phodav server. This 
would avoid timeouts in the guest etc.. Drawback is that you can't change the 
shared dir after the server is started, but that's already a current limitation 
(I wonder if we have a RFE about it)

> +    server = phodav_server_get_soup_server(phodav);
>  
>      CHANNEL_DEBUG(self, "starting client %" G_GINT64_FORMAT,
>      c->demux.client);
>  
> --
> 2.9.3
> 
> _______________________________________________
> Spice-devel mailing list
> [email protected]
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
> 
_______________________________________________
Spice-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/spice-devel

Reply via email to