[RFC wayland 11/12] wayland-client: duplicate fd on connect
David Herrmann
dh.herrmann at googlemail.com
Thu Oct 11 14:37:52 PDT 2012
We need our own copy of the file-descriptor in each wl_display so we can
close() it on error to wake up the main-thread.
Signed-off-by: David Herrmann <dh.herrmann at googlemail.com>
---
src/wayland-client.c | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/src/wayland-client.c b/src/wayland-client.c
index c17cea3..cd2f508 100644
--- a/src/wayland-client.c
+++ b/src/wayland-client.c
@@ -69,7 +69,6 @@ struct wl_display {
struct wl_connection *connection;
int last_error;
int fd;
- int close_fd;
pthread_t display_thread;
struct wl_map objects;
struct wl_event_queue queue;
@@ -365,7 +364,12 @@ wl_display_connect_to_fd(int fd)
memset(display, 0, sizeof *display);
- display->fd = fd;
+ display->fd = wl_os_dupfd_cloexec(fd, 0);
+ if (display->fd < 0) {
+ free(display);
+ return NULL;
+ }
+
wl_map_init(&display->objects);
wl_event_queue_init(&display->queue, display);
wl_list_init(&display->event_queues);
@@ -416,9 +420,7 @@ wl_display_connect(const char *name)
}
display = wl_display_connect_to_fd(fd);
- if (display)
- display->close_fd = 1;
-
+ close(fd);
return display;
}
@@ -428,10 +430,7 @@ wl_display_disconnect(struct wl_display *display)
wl_connection_destroy(display->connection);
wl_map_release(&display->objects);
wl_event_queue_release(&display->queue);
-
- if (display->close_fd)
- close(display->fd);
-
+ close(display->fd);
free(display);
}
--
1.7.12.2
More information about the wayland-devel
mailing list