Add work-around for users who manage their own closure memory

As suggested by DJ
This commit is contained in:
Anthony Green
2019-11-20 06:15:55 -05:00
parent bd3a4687c0
commit 31543c799a
+10 -2
View File
@@ -1,5 +1,6 @@
/* ----------------------------------------------------------------------- /* -----------------------------------------------------------------------
closures.c - Copyright (c) 2007, 2009, 2010 Red Hat, Inc. closures.c - Copyright (c) 2019 Anthony Green
Copyright (c) 2007, 2009, 2010 Red Hat, Inc.
Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc
Copyright (c) 2011 Plausible Labs Cooperative, Inc. Copyright (c) 2011 Plausible Labs Cooperative, Inc.
@@ -936,7 +937,14 @@ void *
ffi_data_to_code_pointer (void *data) ffi_data_to_code_pointer (void *data)
{ {
msegmentptr seg = segment_holding (gm, data); msegmentptr seg = segment_holding (gm, data);
return add_segment_exec_offset (data, seg); /* We expect closures to be allocated with ffi_closure_alloc(), in
which case seg will be non-NULL. However, some users take on the
burden of managing this memory themselves, in which case this
we'll just return data. */
if (seg)
return add_segment_exec_offset (data, seg);
else
return data;
} }
/* Release a chunk of memory allocated with ffi_closure_alloc. If /* Release a chunk of memory allocated with ffi_closure_alloc. If