aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn-Egil Dahlberg <[email protected]>2015-11-18 17:58:14 +0100
committerBjörn-Egil Dahlberg <[email protected]>2015-11-18 18:00:24 +0100
commit5d764f988ab09326d24e39a172083b09ab364c6c (patch)
treebf899001ecf0427769b193d6c1a61054353629ce
parent3f29cf1f72f50d20ce1864f76e1a298602429ca4 (diff)
downloadotp-5d764f988ab09326d24e39a172083b09ab364c6c.tar.gz
otp-5d764f988ab09326d24e39a172083b09ab364c6c.tar.bz2
otp-5d764f988ab09326d24e39a172083b09ab364c6c.zip
Refactor sharing preserved copy flags
The TMPBUF option is no longer needed due to is_literal test and NONE was only used for initial debugging. So we remove the entire option.
-rw-r--r--erts/emulator/beam/beam_debug.c10
-rw-r--r--erts/emulator/beam/copy.c22
-rw-r--r--erts/emulator/beam/erl_db.c4
-rw-r--r--erts/emulator/beam/erl_message.c9
-rw-r--r--erts/emulator/beam/erl_message.h5
-rw-r--r--erts/emulator/beam/erl_process.c5
-rw-r--r--erts/emulator/beam/global.h10
7 files changed, 14 insertions, 51 deletions
diff --git a/erts/emulator/beam/beam_debug.c b/erts/emulator/beam/beam_debug.c
index b007d000bf..e37bd4d78c 100644
--- a/erts/emulator/beam/beam_debug.c
+++ b/erts/emulator/beam/beam_debug.c
@@ -97,20 +97,14 @@ erts_debug_copy_shared_1(BIF_ALIST_1)
Eterm* hp;
Eterm copy;
erts_shcopy_t info;
-#ifdef SHCOPY_DISABLE
- extern int disable_copy_shared;
-#endif
INITIALIZE_SHCOPY(info);
- size = copy_shared_calculate(term, &info, 0);
+ size = copy_shared_calculate(term, &info);
if (size > 0) {
hp = HAlloc(p, size);
}
- copy = copy_shared_perform(term, size, &info, &hp, &p->off_heap, 0);
+ copy = copy_shared_perform(term, size, &info, &hp, &p->off_heap);
DESTROY_SHCOPY(info);
-#ifdef SHCOPY_DISABLE
- disable_copy_shared = 0;
-#endif
BIF_RET(copy);
}
diff --git a/erts/emulator/beam/copy.c b/erts/emulator/beam/copy.c
index 83ca527334..67a96f6442 100644
--- a/erts/emulator/beam/copy.c
+++ b/erts/emulator/beam/copy.c
@@ -923,10 +923,6 @@ Eterm copy_struct_x(Eterm obj, Uint sz, Eterm** hpp, ErlOffHeap* off_heap, Uint
* Using an ESTACK but not very transparently; consider refactoring
*/
-#ifdef SHCOPY_DISABLE
-int disable_copy_shared = ERTS_SHCOPY_FLG_NONE;
-#endif
-
#define DECLARE_SHTABLE(s) \
DECLARE_ESTACK(s); \
Uint ESTK_CONCAT(s,_offset) = 0
@@ -1034,7 +1030,7 @@ do { \
* Copy object "obj" preserving sharing.
* First half: count size and calculate sharing.
*/
-Uint copy_shared_calculate(Eterm obj, erts_shcopy_t *info, Uint32 flags)
+Uint copy_shared_calculate(Eterm obj, erts_shcopy_t *info)
{
Uint sum;
Uint e;
@@ -1058,13 +1054,6 @@ Uint copy_shared_calculate(Eterm obj, erts_shcopy_t *info, Uint32 flags)
if (IS_CONST(obj))
return 0;
-#ifdef SHCOPY_DISABLE
- flags |= disable_copy_shared;
-#endif
-
- if (flags & ERTS_SHCOPY_FLG_NONE)
- return size_object(obj);
-
VERBOSE(DEBUG_SHCOPY, ("[pid=%T] copy_shared_calculate %p\n", mypid, obj));
VERBOSE(DEBUG_SHCOPY, ("[pid=%T] message is %T\n", mypid, obj));
@@ -1299,7 +1288,7 @@ Uint copy_shared_calculate(Eterm obj, erts_shcopy_t *info, Uint32 flags)
* Second half: copy and restore the object.
*/
Uint copy_shared_perform(Eterm obj, Uint size, erts_shcopy_t *info,
- Eterm** hpp, ErlOffHeap* off_heap, Uint32 flags) {
+ Eterm** hpp, ErlOffHeap* off_heap) {
Uint e;
unsigned sz;
Eterm* ptr;
@@ -1328,13 +1317,6 @@ Uint copy_shared_perform(Eterm obj, Uint size, erts_shcopy_t *info,
if (IS_CONST(obj))
return obj;
-#ifdef SHCOPY_DISABLE
- flags |= disable_copy_shared;
-#endif
-
- if (flags & ERTS_SHCOPY_FLG_NONE)
- return copy_struct(obj, size, hpp, off_heap);
-
VERBOSE(DEBUG_SHCOPY, ("[pid=%T] copy_shared_perform %p\n", mypid, obj));
/* step #2: was performed before this function was called
diff --git a/erts/emulator/beam/erl_db.c b/erts/emulator/beam/erl_db.c
index 59a0c0b808..3030c1c91a 100644
--- a/erts/emulator/beam/erl_db.c
+++ b/erts/emulator/beam/erl_db.c
@@ -1832,7 +1832,7 @@ BIF_RETTYPE ets_give_away_3(BIF_ALIST_3)
tb->common.id,
from_pid,
BIF_ARG_3),
- ERTS_SND_FLG_SHCOPY_TMPBUF);
+ 0);
erts_smp_proc_unlock(to_proc, to_locks);
UnUseTmpHeap(5,BIF_P);
BIF_RET(am_true);
@@ -3211,7 +3211,7 @@ retry:
tb->common.id,
p->common.id,
heir_data),
- ERTS_SND_FLG_SHCOPY_TMPBUF);
+ 0);
erts_smp_proc_unlock(to_proc, to_locks);
return !0;
}
diff --git a/erts/emulator/beam/erl_message.c b/erts/emulator/beam/erl_message.c
index 66b337402d..a964f1968b 100644
--- a/erts/emulator/beam/erl_message.c
+++ b/erts/emulator/beam/erl_message.c
@@ -665,7 +665,6 @@ erts_send_message(Process* sender,
#endif
erts_aint32_t receiver_state;
#ifdef SHCOPY_SEND
- unsigned shflags = (flags & ERTS_SND_FLG_SHCOPY_MASK) >> ERTS_SND_FLG_SHCOPY_SHIFT;
erts_shcopy_t info;
#endif
BM_STOP_TIMER(system);
@@ -716,7 +715,7 @@ erts_send_message(Process* sender,
#ifdef SHCOPY_SEND
INITIALIZE_SHCOPY(info);
- msize = copy_shared_calculate(message, &info, shflags);
+ msize = copy_shared_calculate(message, &info);
#else
msize = size_object(message);
#endif
@@ -737,7 +736,7 @@ erts_send_message(Process* sender,
#ifdef SHCOPY_SEND
if (is_not_immed(message))
- message = copy_shared_perform(message, msize, &info, &hp, ohp, shflags);
+ message = copy_shared_perform(message, msize, &info, &hp, ohp);
DESTROY_SHCOPY(info);
#else
if (is_not_immed(message))
@@ -786,7 +785,7 @@ erts_send_message(Process* sender,
BM_SWAP_TIMER(send,size);
#ifdef SHCOPY_SEND
INITIALIZE_SHCOPY(info);
- msize = copy_shared_calculate(message, &info, shflags);
+ msize = copy_shared_calculate(message, &info);
#else
msize = size_object(message);
#endif
@@ -801,7 +800,7 @@ erts_send_message(Process* sender,
BM_SWAP_TIMER(send,copy);
#ifdef SHCOPY_SEND
if (is_not_immed(message))
- message = copy_shared_perform(message, msize, &info, &hp, ohp, shflags);
+ message = copy_shared_perform(message, msize, &info, &hp, ohp);
DESTROY_SHCOPY(info);
#else
if (is_not_immed(message))
diff --git a/erts/emulator/beam/erl_message.h b/erts/emulator/beam/erl_message.h
index 52a648fe0b..740ae46a0f 100644
--- a/erts/emulator/beam/erl_message.h
+++ b/erts/emulator/beam/erl_message.h
@@ -238,11 +238,6 @@ do { \
#define ERTS_SND_FLG_NO_SEQ_TRACE (((unsigned) 1) << 0)
-#define ERTS_SND_FLG_SHCOPY_SHIFT 1
-#define ERTS_SND_FLG_SHCOPY_MASK (ERTS_SHCOPY_FLG_MASK << ERTS_SND_FLG_SHCOPY_SHIFT)
-#define ERTS_SND_FLG_SHCOPY_NONE (ERTS_SHCOPY_FLG_NONE << ERTS_SND_FLG_SHCOPY_SHIFT)
-#define ERTS_SND_FLG_SHCOPY_TMPBUF (ERTS_SHCOPY_FLG_TMPBUF << ERTS_SND_FLG_SHCOPY_SHIFT)
-
#define ERTS_HEAP_FRAG_SIZE(DATA_WORDS) \
(sizeof(ErlHeapFragment) - sizeof(Eterm) + (DATA_WORDS)*sizeof(Eterm))
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c
index a691a3c773..23616f36bf 100644
--- a/erts/emulator/beam/erl_process.c
+++ b/erts/emulator/beam/erl_process.c
@@ -10748,7 +10748,6 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
erts_aint32_t state = 0;
erts_aint32_t prio = (erts_aint32_t) PRIORITY_NORMAL;
#ifdef SHCOPY_SPAWN
- unsigned shflags = 0; /* could be taken from so->flags, if necessary */
erts_shcopy_t info;
INITIALIZE_SHCOPY(info);
#endif
@@ -10804,7 +10803,7 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
BM_SWAP_TIMER(system,size);
#ifdef SHCOPY_SPAWN
- arg_size = copy_shared_calculate(args, &info, shflags);
+ arg_size = copy_shared_calculate(args, &info);
#else
arg_size = size_object(args);
#endif
@@ -10886,7 +10885,7 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
BM_START_TIMER(system);
BM_SWAP_TIMER(system,copy);
#ifdef SHCOPY_SPAWN
- p->arg_reg[2] = copy_shared_perform(args, arg_size, &info, &p->htop, &p->off_heap, shflags);
+ p->arg_reg[2] = copy_shared_perform(args, arg_size, &info, &p->htop, &p->off_heap);
DESTROY_SHCOPY(info);
#else
p->arg_reg[2] = copy_struct(args, arg_size, &p->htop, &p->off_heap);
diff --git a/erts/emulator/beam/global.h b/erts/emulator/beam/global.h
index e9f7901a51..98c275a20c 100644
--- a/erts/emulator/beam/global.h
+++ b/erts/emulator/beam/global.h
@@ -1052,14 +1052,8 @@ void erl_error(char*, va_list);
#ifdef SHCOPY
#define SHCOPY_SEND
#define SHCOPY_SPAWN
-/* Use this if you want sharing-preserving copy to be initially disabled */
-#undef SHCOPY_DISABLE
#endif
-#define ERTS_SHCOPY_FLG_MASK (((Uint32) 3) << 0)
-#define ERTS_SHCOPY_FLG_NONE (((Uint32) 1) << 0)
-#define ERTS_SHCOPY_FLG_TMPBUF (((Uint32) 1) << 1) /* forces INHEAP to true */
-
/* The persistent state while the sharing-preserving copier works */
typedef struct {
@@ -1106,8 +1100,8 @@ Eterm copy_object_x(Eterm, Process*, Uint);
#define copy_object(Term, Proc) copy_object_x(Term,Proc,0)
Uint size_object(Eterm);
-Uint copy_shared_calculate(Eterm, erts_shcopy_t*, Uint32);
-Eterm copy_shared_perform(Eterm, Uint, erts_shcopy_t*, Eterm**, ErlOffHeap*, Uint32);
+Uint copy_shared_calculate(Eterm, erts_shcopy_t*);
+Eterm copy_shared_perform(Eterm, Uint, erts_shcopy_t*, Eterm**, ErlOffHeap*);
Uint size_shared(Eterm);