diff options
author | Andy Wingo <wingo@pobox.com> | 2012-01-07 02:07:09 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2012-01-07 02:07:09 +0100 |
commit | 213544e0dccb67339b009fbd7640ff9b48ca33f6 (patch) | |
tree | eb3760ed3b22ae744a50d2c33b95deba3de188ea /libguile/objcodes.c | |
parent | ab66fb3cd1d6e4343741ccb406e17eb3314eba84 (diff) | |
download | guile-213544e0dccb67339b009fbd7640ff9b48ca33f6.tar.gz |
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!
Diffstat (limited to 'libguile/objcodes.c')
-rw-r--r-- | libguile/objcodes.c | 7 |
1 files 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 { |