aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn-Egil Dahlberg <[email protected]>2015-09-17 16:17:10 +0200
committerBjörn-Egil Dahlberg <[email protected]>2015-11-17 14:45:53 +0100
commit748c73f1687b2375d4c607487f40036ba990c4c7 (patch)
tree8ee084e35c8fde7a645c4a47a23bd6b12cc4e2ef
parent2e10fe29f61bbe3246902e8eaf1636dd6457979f (diff)
downloadotp-748c73f1687b2375d4c607487f40036ba990c4c7.tar.gz
otp-748c73f1687b2375d4c607487f40036ba990c4c7.tar.bz2
otp-748c73f1687b2375d4c607487f40036ba990c4c7.zip
Refactor copy sharing
-rw-r--r--erts/emulator/beam/beam_debug.c6
-rw-r--r--erts/emulator/beam/copy.c10
-rw-r--r--erts/emulator/beam/erl_db.c4
-rw-r--r--erts/emulator/beam/erl_message.h6
-rw-r--r--erts/emulator/beam/erl_process.c6
-rw-r--r--erts/emulator/beam/global.h46
6 files changed, 39 insertions, 39 deletions
diff --git a/erts/emulator/beam/beam_debug.c b/erts/emulator/beam/beam_debug.c
index 36f3cfabbc..b007d000bf 100644
--- a/erts/emulator/beam/beam_debug.c
+++ b/erts/emulator/beam/beam_debug.c
@@ -96,18 +96,18 @@ erts_debug_copy_shared_1(BIF_ALIST_1)
Uint size;
Eterm* hp;
Eterm copy;
- shcopy_info info;
+ erts_shcopy_t info;
#ifdef SHCOPY_DISABLE
extern int disable_copy_shared;
#endif
- INITIALIZE_INFO(info);
+ INITIALIZE_SHCOPY(info);
size = copy_shared_calculate(term, &info, 0);
if (size > 0) {
hp = HAlloc(p, size);
}
copy = copy_shared_perform(term, size, &info, &hp, &p->off_heap, 0);
- DESTROY_INFO(info);
+ DESTROY_SHCOPY(info);
#ifdef SHCOPY_DISABLE
disable_copy_shared = 0;
#endif
diff --git a/erts/emulator/beam/copy.c b/erts/emulator/beam/copy.c
index aa17713d07..f2dd73d862 100644
--- a/erts/emulator/beam/copy.c
+++ b/erts/emulator/beam/copy.c
@@ -1040,14 +1040,14 @@ do { \
* Copy object "obj" preserving sharing.
* First half: count size and calculate sharing.
*/
-Uint copy_shared_calculate(Eterm obj, shcopy_info *info, unsigned flags)
+Uint copy_shared_calculate(Eterm obj, erts_shcopy_t *info, Uint32 flags)
{
Uint sum;
Uint e;
unsigned sz;
Eterm* ptr;
Process* myself;
- int force_local = flags & ERTS_SHCOPY_FLG_TMP_BUF;
+ int force_local = flags & ERTS_SHCOPY_FLG_TMPBUF;
DECLARE_EQUEUE_INIT_INFO(s, info);
DECLARE_BITSTORE_INIT_INFO(b, info);
@@ -1300,8 +1300,8 @@ Uint copy_shared_calculate(Eterm obj, shcopy_info *info, unsigned flags)
* Copy object "obj" preserving sharing.
* Second half: copy and restore the object.
*/
-Uint copy_shared_perform(Eterm obj, Uint size, shcopy_info *info, Eterm** hpp, ErlOffHeap* off_heap, unsigned flags)
-{
+Uint copy_shared_perform(Eterm obj, Uint size, erts_shcopy_t *info,
+ Eterm** hpp, ErlOffHeap* off_heap, Uint32 flags) {
Uint e;
unsigned sz;
Eterm* ptr;
@@ -1311,7 +1311,7 @@ Uint copy_shared_perform(Eterm obj, Uint size, shcopy_info *info, Eterm** hpp, E
Eterm* resp;
unsigned remaining;
Process* myself;
- int force_local = flags & ERTS_SHCOPY_FLG_TMP_BUF;
+ int force_local = flags & ERTS_SHCOPY_FLG_TMPBUF;
#ifdef DEBUG
Eterm saved_obj = obj;
#endif
diff --git a/erts/emulator/beam/erl_db.c b/erts/emulator/beam/erl_db.c
index 6119a9225f..59a0c0b808 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_TMP_BUF);
+ ERTS_SND_FLG_SHCOPY_TMPBUF);
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_TMP_BUF);
+ ERTS_SND_FLG_SHCOPY_TMPBUF);
erts_smp_proc_unlock(to_proc, to_locks);
return !0;
}
diff --git a/erts/emulator/beam/erl_message.h b/erts/emulator/beam/erl_message.h
index 0de36c3199..52a648fe0b 100644
--- a/erts/emulator/beam/erl_message.h
+++ b/erts/emulator/beam/erl_message.h
@@ -239,9 +239,9 @@ 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_TMP_BUF (ERTS_SHCOPY_FLG_TMP_BUF << ERTS_SND_FLG_SHCOPY_SHIFT)
+#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 96d17306a5..a691a3c773 100644
--- a/erts/emulator/beam/erl_process.c
+++ b/erts/emulator/beam/erl_process.c
@@ -10749,8 +10749,8 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
erts_aint32_t prio = (erts_aint32_t) PRIORITY_NORMAL;
#ifdef SHCOPY_SPAWN
unsigned shflags = 0; /* could be taken from so->flags, if necessary */
- shcopy_info info;
- INITIALIZE_INFO(info);
+ erts_shcopy_t info;
+ INITIALIZE_SHCOPY(info);
#endif
#ifdef ERTS_SMP
@@ -10887,7 +10887,7 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
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);
- DESTROY_INFO(info);
+ DESTROY_SHCOPY(info);
#else
p->arg_reg[2] = copy_struct(args, arg_size, &p->htop, &p->off_heap);
#endif
diff --git a/erts/emulator/beam/global.h b/erts/emulator/beam/global.h
index 3c59df5f41..bdee20969d 100644
--- a/erts/emulator/beam/global.h
+++ b/erts/emulator/beam/global.h
@@ -1045,13 +1045,13 @@ void erl_error(char*, va_list);
#undef SHCOPY_DISABLE
#endif
-#define ERTS_SHCOPY_FLG_MASK (((unsigned) 3) << 0)
-#define ERTS_SHCOPY_FLG_NONE (((unsigned) 1) << 0)
-#define ERTS_SHCOPY_FLG_TMP_BUF (((unsigned) 1) << 1)
+#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 shcopy_info {
+typedef struct {
Eterm queue_default[DEF_EQUEUE_SIZE];
Eterm* queue_start;
Eterm* queue_end;
@@ -1062,26 +1062,26 @@ typedef struct shcopy_info {
Eterm shtable_default[DEF_ESTACK_SIZE];
Eterm* shtable_start;
ErtsAlcType_t shtable_alloc_type;
-} shcopy_info;
+} erts_shcopy_t;
-#define INITIALIZE_INFO(info) \
-do { \
- info.queue_start = info.queue_default; \
- info.bitstore_start = info.bitstore_default; \
- info.shtable_start = info.shtable_default; \
+#define INITIALIZE_SHCOPY(info) \
+do { \
+ info.queue_start = info.queue_default; \
+ info.bitstore_start = info.bitstore_default; \
+ info.shtable_start = info.shtable_default; \
} while(0)
-#define DESTROY_INFO(info) \
-do { \
- if (info.queue_start != info.queue_default) { \
- erts_free(info.queue_alloc_type, info.queue_start); \
- } \
- if (info.bitstore_start != info.bitstore_default) { \
- erts_free(info.bitstore_alloc_type, info.bitstore_start); \
- } \
- if (info.shtable_start != info.shtable_default) { \
- erts_free(info.shtable_alloc_type, info.shtable_start); \
- } \
+#define DESTROY_SHCOPY(info) \
+do { \
+ if (info.queue_start != info.queue_default) { \
+ erts_free(info.queue_alloc_type, info.queue_start); \
+ } \
+ if (info.bitstore_start != info.bitstore_default) { \
+ erts_free(info.bitstore_alloc_type, info.bitstore_start); \
+ } \
+ if (info.shtable_start != info.shtable_default) { \
+ erts_free(info.shtable_alloc_type, info.shtable_start); \
+ } \
} while(0)
/* copy.c */
@@ -1089,8 +1089,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, shcopy_info*, unsigned);
-Eterm copy_shared_perform(Eterm, Uint, shcopy_info*, Eterm**, ErlOffHeap*, unsigned);
+Uint copy_shared_calculate(Eterm, erts_shcopy_t*, Uint32);
+Eterm copy_shared_perform(Eterm, Uint, erts_shcopy_t*, Eterm**, ErlOffHeap*, Uint32);
Uint size_shared(Eterm);