aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2016-04-29 15:27:44 +0200
committerSverker Eriksson <[email protected]>2016-04-29 15:27:44 +0200
commitab0fd9ea6c333d11fa03df1391e320077adc1907 (patch)
treee60bacaf8d1df3b0cd229773e5368d1aa0a150df
parent923f0724fcba3f84b51cb0fe677ffa1ebf41ce08 (diff)
parent350c2beb2ed583aa6b0345e8118615bd3c5ccc9d (diff)
downloadotp-ab0fd9ea6c333d11fa03df1391e320077adc1907.tar.gz
otp-ab0fd9ea6c333d11fa03df1391e320077adc1907.tar.bz2
otp-ab0fd9ea6c333d11fa03df1391e320077adc1907.zip
Merge branch 'sverk/big-external-creations.OTP-13488'
second merge of this branch with some bug fixing
-rw-r--r--erts/emulator/beam/external.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/erts/emulator/beam/external.c b/erts/emulator/beam/external.c
index 723c25ff77..3c002d43a7 100644
--- a/erts/emulator/beam/external.c
+++ b/erts/emulator/beam/external.c
@@ -4429,22 +4429,32 @@ init_done:
SKIP(1+atom_extra_skip);
atom_extra_skip = 0;
break;
- case PID_EXT:
case NEW_PID_EXT:
+ atom_extra_skip = 12;
+ goto case_PID;
+ case PID_EXT:
atom_extra_skip = 9;
+ case_PID:
/* In case it is an external pid */
heap_size += EXTERNAL_THING_HEAD_SIZE + 1;
terms++;
break;
- case PORT_EXT:
case NEW_PORT_EXT:
+ atom_extra_skip = 8;
+ goto case_PORT;
+ case PORT_EXT:
atom_extra_skip = 5;
+ case_PORT:
/* In case it is an external port */
heap_size += EXTERNAL_THING_HEAD_SIZE + 1;
terms++;
break;
- case NEW_REFERENCE_EXT:
case NEWER_REFERENCE_EXT:
+ atom_extra_skip = 4;
+ goto case_NEW_REFERENCE;
+ case NEW_REFERENCE_EXT:
+ atom_extra_skip = 1;
+ case_NEW_REFERENCE:
{
int id_words;
@@ -4455,7 +4465,7 @@ init_done:
goto error;
ep += 2;
- atom_extra_skip = 1 + 4*id_words;
+ atom_extra_skip += 4*id_words;
/* In case it is an external ref */
#if defined(ARCH_64)
heap_size += EXTERNAL_THING_HEAD_SIZE + id_words/2 + 1;