From b4bfaec54640ef51accbd4e2470951036bf6cbe8 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Thu, 7 Feb 2019 20:31:10 -0800 Subject: ffi: use padded return size in closure dispatch. * ffi.c (ffi_closure_dispatch_safe): When initially clearing a return value that has release semantics, use the padded size, not the nominal size. Let's get calculate this once and put it in a local. --- ffi.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ffi.c b/ffi.c index d9db41f8..e0f662b3 100644 --- a/ffi.c +++ b/ffi.c @@ -4173,10 +4173,11 @@ static void ffi_closure_dispatch_safe(ffi_cif *cif, void *cret, struct txr_ffi_type *rtft = ffi_type_struct(rtype); volatile val retval = nao; int out_pass_needed = 0; + size_t rsize = pad_retval(rtft->size); uw_frame_t cont_guard; if (rtft->release != 0) - memset(cret, 0, rtft->size); + memset(cret, 0, rsize); uw_push_guard(&cont_guard, 0); @@ -4218,7 +4219,7 @@ static void ffi_closure_dispatch_safe(ffi_cif *cif, void *cret, if (rtft->release != 0 && retval != nao) rtft->release(rtft, retval, convert(mem_t *, cret)); if (!tfcl->abort_retval) - memset(cret, 0, pad_retval(rtft->size)); + memset(cret, 0, rsize); else ifbe2(rtft->rput, rtft->put)(rtft, tfcl->abort_retval, convert(mem_t *, cret), self); -- cgit v1.2.3