Add work-around for users who manage their own closure memory
authorAnthony Green <green@moxielogic.com>
Wed, 20 Nov 2019 11:15:55 +0000 (06:15 -0500)
committerAnthony Green <green@moxielogic.com>
Wed, 20 Nov 2019 11:15:55 +0000 (06:15 -0500)
As suggested by DJ

src/closures.c

index 86e74c2..5120021 100644 (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) 2011 Plausible Labs Cooperative, Inc.
 
@@ -936,7 +937,14 @@ void *
 ffi_data_to_code_pointer (void *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