[Spice-devel] [PATCH libcacard 1/2] vscclient: Catch write errors

Jason Andryuk jandryuk at gmail.com
Tue Jul 24 18:34:58 UTC 2018


The GIOStatus return value indicates errors, so catch it and check it to
know if we should return an error.

Signed-off-by: Jason Andryuk <jandryuk at gmail.com>
---
Truth be told, I can't remember exactly why I had to write this.  Could
status be G_IO_STATUS_ERROR, but err still be NULL?  Since I added
debugging output with those value, it maybe the case.

 src/vscclient.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/vscclient.c b/src/vscclient.c
index fa60162..56e2ced 100644
--- a/src/vscclient.c
+++ b/src/vscclient.c
@@ -69,12 +69,21 @@ do_socket_send(GIOChannel *source,
 {
     gsize bw;
     GError *err = NULL;
+    GIOStatus status;
 
     g_return_val_if_fail(socket_to_send->len != 0, FALSE);
     g_return_val_if_fail(condition & G_IO_OUT, FALSE);
 
-    g_io_channel_write_chars(channel_socket,
+    status = g_io_channel_write_chars(channel_socket,
         (gchar *)socket_to_send->data, socket_to_send->len, &bw, &err);
+    if (verbose) {
+        printf("status: %d bytes written: %d err: %p\n", status, bw, err);
+    }
+
+    if (status == G_IO_STATUS_ERROR) {
+        return FALSE;
+    }
+
     if (err != NULL) {
         g_error("Error while sending socket %s", err->message);
         return FALSE;
-- 
2.17.1



More information about the Spice-devel mailing list