[PATCH wayland] server: fix conditions for fds in wl_socket_destroy
Pekka Paalanen
ppaalanen at gmail.com
Thu Aug 7 06:51:24 PDT 2014
From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
0 is also a valid fd, and needs to be closed.
On error we set fd to -1. We need to also initialize fds to -1, so we do
not accidentally close stdout on error.
While fixing this, also remove one use-before-NULL-check.
Based on the patch by Marek.
Cc: Marek Chalupa <mchqwerty at gmail.com>
Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
---
src/wayland-server.c | 27 ++++++++++++++++++++-------
1 file changed, 20 insertions(+), 7 deletions(-)
diff --git a/src/wayland-server.c b/src/wayland-server.c
index 3c162d4..3bd8e68 100644
--- a/src/wayland-server.c
+++ b/src/wayland-server.c
@@ -848,16 +848,32 @@ wl_socket_destroy(struct wl_socket *s)
wl_event_source_remove(s->source);
if (s->addr.sun_path[0])
unlink(s->addr.sun_path);
- if (s->fd)
+ if (s->fd >= 0)
close(s->fd);
if (s->lock_addr[0])
unlink(s->lock_addr);
- if (s->fd_lock)
+ if (s->fd_lock >= 0)
close(s->fd_lock);
free(s);
}
+static struct wl_socket *
+wl_socket_alloc(void)
+{
+ struct wl_socket *s;
+
+ s = malloc(sizeof *s);
+ if (!s)
+ return NULL;
+
+ memset(s, 0, sizeof *s);
+ s->fd = -1;
+ s->fd_lock = -1;
+
+ return s;
+}
+
WL_EXPORT void
wl_display_destroy(struct wl_display *display)
{
@@ -1149,12 +1165,10 @@ wl_display_add_socket_auto(struct wl_display *display)
* you need more than this, use the explicit add_socket API. */
const int MAX_DISPLAYNO = 32;
- s = malloc(sizeof *s);
+ s = wl_socket_alloc();
if (s == NULL)
return NULL;
- memset(s, 0, sizeof *s);
-
do {
snprintf(display_name, sizeof display_name, "wayland-%d", displayno);
if (wl_socket_init_for_display_name(s, display_name) < 0) {
@@ -1184,8 +1198,7 @@ wl_display_add_socket(struct wl_display *display, const char *name)
{
struct wl_socket *s;
- s = malloc(sizeof *s);
- memset(s, 0, sizeof *s);
+ s = wl_socket_alloc();
if (s == NULL)
return -1;
--
1.8.5.5
More information about the wayland-devel
mailing list