Put the fd in the closure so debugging can print it
authorKristian Høgsberg <krh@bitplanet.net>
Wed, 19 Jan 2011 19:11:48 +0000 (14:11 -0500)
committerKristian Høgsberg <krh@bitplanet.net>
Wed, 19 Jan 2011 19:25:12 +0000 (14:25 -0500)
wayland/connection.c

index 0705c19..73715e2 100644 (file)
@@ -369,7 +369,7 @@ wl_connection_vmarshal(struct wl_connection *connection,
        struct wl_array **arrayp, *array;
        const char **sp, *s;
        char *extra;
-       int i, count, fd, extra_size;
+       int i, count, fd, extra_size, *fd_ptr;
 
        extra_size = wl_message_size_extra(message);
        count = strlen(message->signature) + 2;
@@ -449,12 +449,18 @@ wl_connection_vmarshal(struct wl_connection *connection,
                        break;
 
                case 'h':
+                       closure->types[i] = &ffi_type_sint;
+                       closure->args[i] = extra;
+                       fd_ptr = (int *) extra;
+                       extra += sizeof *fd_ptr;
+
                        fd = va_arg(ap, int);
                        dup_fd = dup(fd);
                        if (dup_fd < 0) {
                                fprintf(stderr, "dup failed: %m");
                                abort();
                        }
+                       *fd_ptr = dup_fd;
                        wl_buffer_put(&connection->fds_out,
                                      &dup_fd, sizeof dup_fd);
                        break;