Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:24
erlang
2221-erts-Add-ErtsInBetween.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 2221-erts-Add-ErtsInBetween.patch of Package erlang
From 84ec961084952b8dd423d2b6cdc88e0f360935a8 Mon Sep 17 00:00:00 2001 From: Sverker Eriksson <sverker@erlang.org> Date: Fri, 4 Mar 2022 14:04:06 +0100 Subject: [PATCH 1/4] erts: Add ErtsInBetween --- erts/emulator/beam/erl_bif_trace.c | 3 +-- erts/emulator/beam/erl_bits.c | 7 +++---- erts/emulator/beam/sys.h | 3 +++ 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/erts/emulator/beam/erl_bif_trace.c b/erts/emulator/beam/erl_bif_trace.c index ce83101cde..9ea80d6dc0 100644 --- a/erts/emulator/beam/erl_bif_trace.c +++ b/erts/emulator/beam/erl_bif_trace.c @@ -1859,8 +1859,7 @@ new_seq_trace_token(Process* p, int ensure_new_heap) Uint mature_size = p->high_water - mature; Eterm* tpl = tuple_val(SEQ_TRACE_TOKEN(p)); ASSERT(arityval(tpl[0]) == 5); - if (ErtsInArea(tpl, OLD_HEAP(p), - (OLD_HEND(p) - OLD_HEAP(p))*sizeof(Eterm)) || + if (ErtsInBetween(tpl, OLD_HEAP(p), OLD_HEND(p)) || ErtsInArea(tpl, mature, mature_size*sizeof(Eterm))) { hp = HAlloc(p, 6); sys_memcpy(hp, tpl, 6*sizeof(Eterm)); diff --git a/erts/emulator/beam/erl_bits.c b/erts/emulator/beam/erl_bits.c index e23d8d7697..108842a54f 100644 --- a/erts/emulator/beam/erl_bits.c +++ b/erts/emulator/beam/erl_bits.c @@ -1380,8 +1380,7 @@ static ERTS_INLINE void increase_proc_bin_sz(Process* p, ProcBin* pb, Uint new_size) { if (new_size > pb->size) { - if (ErtsInArea(pb, OLD_HEAP(p), ((OLD_HTOP(p) - OLD_HEAP(p)) - * sizeof(Eterm)))) { + if (ErtsInBetween(pb, OLD_HEAP(p), OLD_HTOP(p))) { BIN_OLD_VHEAP(p) += (new_size / sizeof(Eterm) - pb->size / sizeof(Eterm)); } @@ -1734,8 +1733,8 @@ erts_bs_private_append_checked(Process* p, Eterm bin, Uint build_size_in_bits, U sys_memcpy(bptr->orig_bytes, binp->orig_bytes, binp->orig_size); /* If the subbinary is on the mature or old heap, we need to also move it */ - if (ErtsInArea(sb, OLD_HEAP(p), ((char *)OLD_HTOP(p)) - ((char *)OLD_HEAP(p))) || - ErtsInArea(sb, HEAP_START(p), ((char *)HIGH_WATER(p)) - ((char *)HEAP_START(p)))) { + if (ErtsInBetween(sb, OLD_HEAP(p), OLD_HTOP(p)) || + ErtsInBetween(sb, HEAP_START(p), HIGH_WATER(p))) { sz += ERL_SUB_BIN_SIZE; } diff --git a/erts/emulator/beam/sys.h b/erts/emulator/beam/sys.h index cdbd943367..ab867b3fe8 100644 --- a/erts/emulator/beam/sys.h +++ b/erts/emulator/beam/sys.h @@ -105,6 +105,9 @@ #define ErtsInArea(ptr,start,nbytes) \ ((UWord)((char*)(ptr) - (char*)(start)) < (nbytes)) +#define ErtsInBetween(ptr,start,end) \ + ErtsInArea(ptr, start, (char*)(end) - (char*)(start)) + #define ErtsContainerStruct(ptr, type, member) \ ((type *)((char *)(1 ? (ptr) : &((type *)0)->member) - offsetof(type, member))) -- 2.34.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor