diff options
author | Lukas Larsson <[email protected]> | 2017-02-21 09:52:51 +0100 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2017-02-21 09:52:51 +0100 |
commit | 3671dd2d426208cf0639530b294da083b5e75acd (patch) | |
tree | 39dedb42bec67ca0dd8630c30af1032e886f7f60 /erts/emulator/beam | |
parent | 8f0cfd160505e5ac6c100db7d1294c2e63dc0cbb (diff) | |
download | otp-3671dd2d426208cf0639530b294da083b5e75acd.tar.gz otp-3671dd2d426208cf0639530b294da083b5e75acd.tar.bz2 otp-3671dd2d426208cf0639530b294da083b5e75acd.zip |
erts: Emasculate binaries that are scheduled in port_control
Diffstat (limited to 'erts/emulator/beam')
-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); |