diff options
author | Sverker Eriksson <[email protected]> | 2017-02-14 18:26:31 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2017-02-14 18:26:31 +0100 |
commit | 118de47d703e303aea7f4575849a37c11416ba14 (patch) | |
tree | 211bbb6c24d6069c657d3b7ac7776be45631ec48 /erts/emulator/beam/erl_db_util.c | |
parent | dd60ebfa1f2f6dc203deee59f95305291d06a619 (diff) | |
download | otp-118de47d703e303aea7f4575849a37c11416ba14.tar.gz otp-118de47d703e303aea7f4575849a37c11416ba14.tar.bz2 otp-118de47d703e303aea7f4575849a37c11416ba14.zip |
erts: Add deallocation veto for magic destructors
A magic destructor can return 0 and thereby take control
and prolong the lifetime of a magic binary.
Diffstat (limited to 'erts/emulator/beam/erl_db_util.c')
-rw-r--r-- | erts/emulator/beam/erl_db_util.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/erts/emulator/beam/erl_db_util.c b/erts/emulator/beam/erl_db_util.c index 070e29578f..3ac2bdd3d6 100644 --- a/erts/emulator/beam/erl_db_util.c +++ b/erts/emulator/beam/erl_db_util.c @@ -1702,17 +1702,18 @@ error: /* Here is were we land when compilation failed. */ /* ** Free a match program (in a binary) */ -void erts_db_match_prog_destructor(Binary *bprog) +int erts_db_match_prog_destructor(Binary *bprog) { MatchProg *prog; if (bprog == NULL) - return; + return 1; prog = Binary2MatchProg(bprog); if (prog->term_save != NULL) { free_message_buffer(prog->term_save); } if (prog->saved_program_buf != NULL) free_message_buffer(prog->saved_program_buf); + return 1; } void |