[PATCH wayland 4/9] connection: Close fds from half marshalled closures
Derek Foreman
derekf at osg.samsung.com
Fri Apr 7 20:27:50 UTC 2017
If we fail to completely marshal a closure then we need to close the fds
we created with dupfd.
Signed-off-by: Derek Foreman <derekf at osg.samsung.com>
---
src/connection.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/connection.c b/src/connection.c
index 7fe35b5..22bf836 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -532,6 +532,7 @@ wl_closure_marshal(struct wl_object *sender, uint32_t opcode,
struct wl_closure *closure;
struct wl_object *object;
int i, count, fd, dup_fd;
+ int fds[WL_CLOSURE_MAX_ARGS], fd_count = 0;
const char *signature;
struct argument_details arg;
@@ -584,6 +585,7 @@ wl_closure_marshal(struct wl_object *sender, uint32_t opcode,
if (dup_fd < 0)
wl_abort("dup failed: %s\n", strerror(errno));
closure->args[i].h = dup_fd;
+ fds[fd_count++] = dup_fd;
break;
default:
wl_abort("unhandled format code: '%c'\n", arg.type);
@@ -599,6 +601,8 @@ wl_closure_marshal(struct wl_object *sender, uint32_t opcode,
return closure;
err_null:
+ for (i = 0; i < fd_count; i++)
+ close(fds[i]);
wl_closure_destroy(closure);
wl_log("error marshalling arguments for %s (signature %s): "
"null value passed for arg %i\n", message->name,
--
2.11.0
More information about the wayland-devel
mailing list