From: Lennart Poettering Date: Wed, 10 Apr 2013 21:04:20 +0000 (+0200) Subject: bus: when we unmarshal an fd it should stay owned by the message object X-Git-Tag: v202~162 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=1ef2af5ae02aede39262dedd9fd358b607450662;hp=50fb97935d689a520251b2d543599be14bdfd0ed bus: when we unmarshal an fd it should stay owned by the message object If the user wants the fd to stay valid he should keep a reference to the message object or duplicate the fd. This unifies behaviour of demarshalling data fields and unix fds. --- diff --git a/src/libsystemd-bus/bus-message.c b/src/libsystemd-bus/bus-message.c index fb63a2d1c..308166409 100644 --- a/src/libsystemd-bus/bus-message.c +++ b/src/libsystemd-bus/bus-message.c @@ -1710,18 +1710,13 @@ int sd_bus_message_read_basic(sd_bus_message *m, char type, void *p) { break; case SD_BUS_TYPE_UNIX_FD: { - int copy; uint32_t j; j = BUS_MESSAGE_BSWAP32(m, *(uint32_t*) q); if (j >= m->n_fds) return -EBADMSG; - copy = fcntl(m->fds[j], F_DUPFD_CLOEXEC, 3); - if (copy < 0) - return -errno; - - *(int*) p = copy; + *(int*) p = m->fds[j]; break; } diff --git a/src/libsystemd-bus/test-bus-chat.c b/src/libsystemd-bus/test-bus-chat.c index 533d78cc3..371c7a751 100644 --- a/src/libsystemd-bus/test-bus-chat.c +++ b/src/libsystemd-bus/test-bus-chat.c @@ -230,8 +230,6 @@ static int server(sd_bus *bus) { goto fail; } - close_nointr_nofail(fd); - r = sd_bus_reply_method_return(bus, m, NULL); if (r < 0) { log_error("Failed to send reply: %s", strerror(-r));