diff options
author | Sverker Eriksson <[email protected]> | 2016-04-29 15:27:44 +0200 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2016-04-29 15:27:44 +0200 |
commit | ab0fd9ea6c333d11fa03df1391e320077adc1907 (patch) | |
tree | e60bacaf8d1df3b0cd229773e5368d1aa0a150df /erts/emulator | |
parent | 923f0724fcba3f84b51cb0fe677ffa1ebf41ce08 (diff) | |
parent | 350c2beb2ed583aa6b0345e8118615bd3c5ccc9d (diff) | |
download | otp-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
Diffstat (limited to 'erts/emulator')
-rw-r--r-- | erts/emulator/beam/external.c | 18 |
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; |