diff options
author | Sverker Eriksson <[email protected]> | 2014-10-28 19:17:21 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2014-10-28 19:17:21 +0100 |
commit | 3f449580f2f890815f165781f1184541b0672f77 (patch) | |
tree | fa75219870209cd627769f5cb9cc66f588f40ec9 /erts/emulator | |
parent | 6e30d2a47c2a2bded04b2a411161147cba7aca51 (diff) | |
parent | ff7739cfae9c2b0915842572284a702d52b2d8db (diff) | |
download | otp-3f449580f2f890815f165781f1184541b0672f77.tar.gz otp-3f449580f2f890815f165781f1184541b0672f77.tar.bz2 otp-3f449580f2f890815f165781f1184541b0672f77.zip |
Merge branch 'maint'
Diffstat (limited to 'erts/emulator')
-rw-r--r-- | erts/emulator/beam/erl_alloc_util.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/erts/emulator/beam/erl_alloc_util.c b/erts/emulator/beam/erl_alloc_util.c index a4e164bf51..55052430e1 100644 --- a/erts/emulator/beam/erl_alloc_util.c +++ b/erts/emulator/beam/erl_alloc_util.c @@ -1775,6 +1775,18 @@ handle_delayed_dealloc(Allctr_t *allctr, * data has been overwritten by the queue. */ Carrier_t *crr = FIRST_BLK_TO_MBC(allctr, blk); + + /* Restore word overwritten by the dd-queue as it will be read + * if this carrier is pulled from dc_list by cpool_fetch() + */ + ERTS_ALC_CPOOL_ASSERT(FBLK_TO_MBC(blk) != crr); + ERTS_ALC_CPOOL_ASSERT(sizeof(ErtsAllctrDDBlock_t) == sizeof(void*)); +#ifdef MBC_ABLK_OFFSET_BITS + blk->u.carrier = crr; +#else + blk->carrier = crr; +#endif + ERTS_ALC_CPOOL_ASSERT(ERTS_ALC_IS_CPOOL_ENABLED(allctr)); ERTS_ALC_CPOOL_ASSERT(allctr == crr->cpool.orig_allctr); ERTS_ALC_CPOOL_ASSERT(((erts_aint_t) allctr) |