On Thu, Aug 17, 2017 at 03:35:57PM +0200, marcandre.lureau@xxxxxxxxxx wrote: > From: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx> > > Instead of printing a warning when trying to read from a closed > stream. It can happen that libsoup closes the pipe output stream while > the input stream had no pending operation, in which case the close is > successful and we shouldn't try to read from the stream anymore. > > Signed-off-by: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx> > --- > src/channel-webdav.c | 17 +++++++++++------ > 1 file changed, 11 insertions(+), 6 deletions(-) > > diff --git a/src/channel-webdav.c b/src/channel-webdav.c > index 4a246b5..f1b6c2a 100644 > --- a/src/channel-webdav.c > +++ b/src/channel-webdav.c > @@ -218,7 +218,7 @@ client_ref(Client *client) > return client; > } > > -static void client_start_read(Client *client); > +static bool client_start_read(Client *client); > > static void remove_client(Client *client) > { > @@ -234,10 +234,9 @@ static void mux_pushed_cb(OutputQueue *q, gpointer user_data) > { > Client *client = user_data; > > - if (client->mux.size == 0) { > + if (client->mux.size == 0 || > + !client_start_read(client)) { > remove_client(client); > - } else { > - client_start_read(client); > } > > client_unref(client); > @@ -280,14 +279,18 @@ end: > client_unref(client); > } > > -static void client_start_read(Client *client) > +static bool client_start_read(Client *client) > { > GInputStream *input; > > input = g_io_stream_get_input_stream(G_IO_STREAM(client->pipe)); > + if (g_input_stream_is_closed(input)) { > + return false; > + } > g_input_stream_read_async(input, client->mux.buf, MAX_MUX_SIZE, > G_PRIORITY_DEFAULT, client->cancellable, server_reply_cb, > client_ref(client)); > + return true; > } > > static void start_demux(SpiceWebdavChannel *self); > @@ -361,6 +364,7 @@ static void start_client(SpiceWebdavChannel *self) > SoupServer *server; > GSocketAddress *addr; > GError *error = NULL; > + bool started; > > session = spice_channel_get_session(SPICE_CHANNEL(self)); > server = phodav_server_get_soup_server(spice_session_get_webdav_server(session)); > @@ -384,7 +388,8 @@ G_GNUC_END_IGNORE_DEPRECATIONS > > g_hash_table_insert(c->clients, &client->id, client); > > - client_start_read(client); > + started = client_start_read(client); > + g_assert(started); Isn't it assert too much? > demux_to_client(client); > > g_clear_object(&addr); > -- > 2.14.0.1.geff633fa0 > > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/spice-devel
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel