diff options
author | Lukas Larsson <[email protected]> | 2017-02-22 15:34:06 +0100 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2017-02-22 15:34:06 +0100 |
commit | ae5ab58d64d18365a9b94a780760fd9c50119900 (patch) | |
tree | 4939e5dd3dda76c672f350a14ab0c15041bfd033 /erts | |
parent | dd7ab7bb569470bc6c69d2c6e6dba2cbb5978575 (diff) | |
parent | 3671dd2d426208cf0639530b294da083b5e75acd (diff) | |
download | otp-ae5ab58d64d18365a9b94a780760fd9c50119900.tar.gz otp-ae5ab58d64d18365a9b94a780760fd9c50119900.tar.bz2 otp-ae5ab58d64d18365a9b94a780760fd9c50119900.zip |
Merge branch 'lukas/erts/port_control_emasculate_binary/OTP-14231' into maint
* lukas/erts/port_control_emasculate_binary/OTP-14231:
erts: Emasculate binaries that are scheduled in port_control
Diffstat (limited to 'erts')
-rw-r--r-- | erts/emulator/beam/io.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/erts/emulator/beam/io.c b/erts/emulator/beam/io.c index 31396d06c6..9bf29ee230 100644 --- a/erts/emulator/beam/io.c +++ b/erts/emulator/beam/io.c @@ -4884,10 +4884,16 @@ erts_port_control(Process* c_p, ASSERT(!tmp_alloced); if (*ebinp == HEADER_SUB_BIN) ebinp = binary_val(((ErlSubBin *) ebinp)->orig); + if (*ebinp != HEADER_PROC_BIN) copy = 1; else { - binp = ((ProcBin *) ebinp)->val; + ProcBin *pb = (ProcBin *) ebinp; + + if (pb->flags) + erts_emasculate_writable_binary(pb); + + binp = pb->val; ASSERT(bufp <= bufp + size); ASSERT(binp->orig_bytes <= bufp && bufp + size <= binp->orig_bytes + binp->orig_size); |