[PATCH 1/2] server: don't leak fd on error

Marek Chalupa mchqwerty at gmail.com
Wed Aug 6 03:18:11 PDT 2014


close opened fd if an error occur.
---
 src/wayland-server.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/wayland-server.c b/src/wayland-server.c
index 3c162d4..ce7bbff 100644
--- a/src/wayland-server.c
+++ b/src/wayland-server.c
@@ -1119,23 +1119,28 @@ _wl_display_add_socket(struct wl_display *display, struct wl_socket *s)
 	size = offsetof (struct sockaddr_un, sun_path) + strlen(s->addr.sun_path);
 	if (bind(s->fd, (struct sockaddr *) &s->addr, size) < 0) {
 		wl_log("bind() failed with error: %m\n");
-		return -1;
+		goto err;
 	}
 
 	if (listen(s->fd, 1) < 0) {
 		wl_log("listen() failed with error: %m\n");
-		return -1;
+		goto err;
 	}
 
 	s->source = wl_event_loop_add_fd(display->loop, s->fd,
 					 WL_EVENT_READABLE,
 					 socket_data, display);
-	if (s->source == NULL) {
-		return -1;
-	}
+	if (s->source == NULL)
+		goto err;
 
 	wl_list_insert(display->socket_list.prev, &s->link);
 	return 0;
+
+err:
+	close(s->fd);
+	s->fd = -1;
+
+	return -1;
 }
 
 WL_EXPORT const char *
-- 
2.0.4



More information about the wayland-devel mailing list