From 213544e0dccb67339b009fbd7640ff9b48ca33f6 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Sat, 7 Jan 2012 02:07:09 +0100 Subject: [PATCH] don't leak file descriptors when mmaping objcode * libguile/objcodes.c (make_objcode_from_file): Close the mmap'd file, so that we don't leak the descriptor. I was previously under the mistaken impression that closing the fd unmapped the memory, which is not the case. Thanks to Cedric Cellier for the tip! --- libguile/objcodes.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/libguile/objcodes.c b/libguile/objcodes.c index 536094fe2..004dd6118 100644 --- a/libguile/objcodes.c +++ b/libguile/objcodes.c @@ -145,7 +145,7 @@ verify_cookie (char *cookie, struct stat *st, int map_fd, void *map_addr) - scm_tc7_objcode | type | flags - the struct scm_objcode C object - the parent of this objcode: either another objcode, a bytevector, - or, in the case of mmap types, file descriptors (as an inum) + or, in the case of mmap types, #f - "native code" -- not currently used. */ @@ -203,12 +203,11 @@ make_objcode_from_file (int fd) scm_from_size_t (total_len))); } - /* FIXME: we leak ourselves and the file descriptor. but then again so does - dlopen(). */ + (void) close (fd); return scm_permanent_object (scm_double_cell (SCM_MAKE_OBJCODE_TAG (SCM_OBJCODE_TYPE_MMAP, 0), (scm_t_bits)(addr + strlen (SCM_OBJCODE_COOKIE)), - SCM_UNPACK (scm_from_int (fd)), 0)); + SCM_BOOL_F_BITS, 0)); } #else {