[PATCH 2/5] server: Move bind and listen into initializer function

Benjamin Franzke benjaminfranzke at googlemail.com
Wed Feb 27 03:10:17 PST 2013


Restructured for systemd socket activation.
Makes it easier to drop this step later, by returning early.
---
 src/wayland-server.c | 36 +++++++++++++++++++++---------------
 1 file changed, 21 insertions(+), 15 deletions(-)

diff --git a/src/wayland-server.c b/src/wayland-server.c
index fb07a01..9ac0a71 100644
--- a/src/wayland-server.c
+++ b/src/wayland-server.c
@@ -1292,11 +1292,30 @@ get_socket_lock(struct wl_socket *socket)
 	return fd_lock;
 }
 
+static int
+init_socket(struct wl_socket *s, int name_size)
+{
+	socklen_t size;
+
+	size = offsetof (struct sockaddr_un, sun_path) + name_size;
+	if (bind(s->fd, (struct sockaddr *) &s->addr, size) < 0) {
+		wl_log("bind() failed with error: %m\n");
+		return -1;
+	}
+
+	if (listen(s->fd, 1) < 0) {
+		wl_log("listen() failed with error: %m\n");
+		unlink(s->addr.sun_path);
+		return -1;
+	}
+
+	return 0;
+}
+
 WL_EXPORT int
 wl_display_add_socket(struct wl_display *display, const char *name)
 {
 	struct wl_socket *s;
-	socklen_t size;
 	int name_size;
 	const char *runtime_dir;
 
@@ -1349,20 +1368,7 @@ wl_display_add_socket(struct wl_display *display, const char *name)
 		free(s);
 		return -1;
 	}
-
-	size = offsetof (struct sockaddr_un, sun_path) + name_size;
-	if (bind(s->fd, (struct sockaddr *) &s->addr, size) < 0) {
-		wl_log("bind() failed with error: %m\n");
-		close(s->fd);
-		unlink(s->lock_addr);
-		close(s->fd_lock);
-		free(s);
-		return -1;
-	}
-
-	if (listen(s->fd, 1) < 0) {
-		wl_log("listen() failed with error: %m\n");
-		unlink(s->addr.sun_path);
+	if (init_socket(s, name_size) < 0) {
 		close(s->fd);
 		unlink(s->lock_addr);
 		close(s->fd_lock);
-- 
1.7.12.4



More information about the wayland-devel mailing list