qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v4 11/14] contrib/ivshmem-*: rework error handling


From: David Marchand
Subject: [Qemu-devel] [PATCH v4 11/14] contrib/ivshmem-*: rework error handling
Date: Tue, 2 Sep 2014 17:25:29 +0200

Following Gonglei comments, rework error handling using goto.

Signed-off-by: David Marchand <address@hidden>
---
 contrib/ivshmem-client/ivshmem-client.c |   17 ++++++++---------
 contrib/ivshmem-server/ivshmem-server.c |   19 ++++++++++---------
 2 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/contrib/ivshmem-client/ivshmem-client.c 
b/contrib/ivshmem-client/ivshmem-client.c
index a08f4d9..e9a19ff 100644
--- a/contrib/ivshmem-client/ivshmem-client.c
+++ b/contrib/ivshmem-client/ivshmem-client.c
@@ -180,18 +180,14 @@ ivshmem_client_connect(IvshmemClient *client)
     if (connect(client->sock_fd, (struct sockaddr *)&sun, sizeof(sun)) < 0) {
         debug_log(client, "cannot connect to %s: %s\n", sun.sun_path,
                   strerror(errno));
-        close(client->sock_fd);
-        client->sock_fd = -1;
-        return -1;
+        goto err_close;
     }
 
     /* first, we expect our index + a fd == -1 */
     if (read_one_msg(client, &client->local.id, &fd) < 0 ||
         client->local.id < 0 || fd != -1) {
         debug_log(client, "cannot read from server\n");
-        close(client->sock_fd);
-        client->sock_fd = -1;
-        return -1;
+        goto err_close;
     }
     debug_log(client, "our_id=%ld\n", client->local.id);
 
@@ -200,13 +196,16 @@ ivshmem_client_connect(IvshmemClient *client)
     if (read_one_msg(client, &tmp, &fd) < 0 ||
         tmp != -1 || fd < 0) {
         debug_log(client, "cannot read from server (2)\n");
-        close(client->sock_fd);
-        client->sock_fd = -1;
-        return -1;
+        goto err_close;
     }
     debug_log(client, "shm_fd=%d\n", fd);
 
     return 0;
+
+err_close:
+    close(client->sock_fd);
+    client->sock_fd = -1;
+    return -1;
 }
 
 /* close connection to the server, and free all peer structures */
diff --git a/contrib/ivshmem-server/ivshmem-server.c 
b/contrib/ivshmem-server/ivshmem-server.c
index 4732dab..f441da7 100644
--- a/contrib/ivshmem-server/ivshmem-server.c
+++ b/contrib/ivshmem-server/ivshmem-server.c
@@ -264,7 +264,7 @@ ivshmem_server_start(IvshmemServer *server)
     if (ivshmem_ftruncate(shm_fd, server->shm_size) < 0) {
         fprintf(stderr, "ftruncate(%s) failed: %s\n", server->shm_path,
                 strerror(errno));
-        return -1;
+        goto err_close_shm;
     }
 
     debug_log(server, "create & bind socket %s\n", server->unix_sock_path);
@@ -273,8 +273,7 @@ ivshmem_server_start(IvshmemServer *server)
     sock_fd = socket(AF_UNIX, SOCK_STREAM, 0);
     if (sock_fd < 0) {
         debug_log(server, "cannot create socket: %s\n", strerror(errno));
-        close(shm_fd);
-        return -1;
+        goto err_close_shm;
     }
 
     sun.sun_family = AF_UNIX;
@@ -283,22 +282,24 @@ ivshmem_server_start(IvshmemServer *server)
     if (bind(sock_fd, (struct sockaddr *)&sun, sizeof(sun)) < 0) {
         debug_log(server, "cannot connect to %s: %s\n", sun.sun_path,
                   strerror(errno));
-        close(sock_fd);
-        close(shm_fd);
-        return -1;
+        goto err_close_sock;
     }
 
     if (listen(sock_fd, IVSHMEM_SERVER_LISTEN_BACKLOG) < 0) {
         debug_log(server, "listen() failed: %s\n", strerror(errno));
-        close(sock_fd);
-        close(shm_fd);
-        return -1;
+        goto err_close_sock;
     }
 
     server->sock_fd = sock_fd;
     server->shm_fd = shm_fd;
 
     return 0;
+
+err_close_sock:
+    close(sock_fd);
+err_close_shm:
+    close(shm_fd);
+    return -1;
 }
 
 /* close connections to clients, the unix socket and the shm fd */
-- 
1.7.10.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]