diff options
author | Sverker Eriksson <[email protected]> | 2013-06-17 15:35:28 +0200 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2013-06-17 15:35:28 +0200 |
commit | 3ed3b7eeb82816a79efda7ff9fd936e4fe5da6d4 (patch) | |
tree | bf88ac46bf32c729b9bae5487c1739103d00f36c /erts/emulator/beam | |
parent | c1c942d22b8f668d7b70cfdbdc57c525d1c32883 (diff) | |
parent | a568634652396b0657e089100047f127804c970d (diff) | |
download | otp-3ed3b7eeb82816a79efda7ff9fd936e4fe5da6d4.tar.gz otp-3ed3b7eeb82816a79efda7ff9fd936e4fe5da6d4.tar.bz2 otp-3ed3b7eeb82816a79efda7ff9fd936e4fe5da6d4.zip |
Merge branch 'maint'
Diffstat (limited to 'erts/emulator/beam')
-rw-r--r-- | erts/emulator/beam/external.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/erts/emulator/beam/external.c b/erts/emulator/beam/external.c index 45025ad631..249b1e0923 100644 --- a/erts/emulator/beam/external.c +++ b/erts/emulator/beam/external.c @@ -1662,6 +1662,9 @@ static Eterm erts_term_to_binary_int(Process* p, Eterm Term, int level, Uint fla pb->flags = 0; OH_OVERHEAD(&(MSO(p)), pb->size / sizeof(Eterm)); erts_refc_inc(&result_bin->refc, 1); + if (context_b && erts_refc_read(&context_b->refc,0) == 0) { + erts_bin_free(context_b); + } return make_binary(pb); } /* Continue with compression... */ @@ -1736,6 +1739,9 @@ static Eterm erts_term_to_binary_int(Process* p, Eterm Term, int level, Uint fla context->s.cc.result_bin = NULL; context->alive = 0; BUMP_REDS(p, (this_time * CONTEXT_REDS) / TERM_TO_BINARY_COMPRESS_CHUNK); + if (context_b && erts_refc_read(&context_b->refc,0) == 0) { + erts_bin_free(context_b); + } return make_binary(pb); } default: /* Compression error, revert to uncompressed binary (still in @@ -1758,6 +1764,9 @@ static Eterm erts_term_to_binary_int(Process* p, Eterm Term, int level, Uint fla context->s.cc.destination_bin = NULL; context->alive = 0; BUMP_REDS(p, (this_time * CONTEXT_REDS) / TERM_TO_BINARY_COMPRESS_CHUNK); + if (context_b && erts_refc_read(&context_b->refc,0) == 0) { + erts_bin_free(context_b); + } return make_binary(pb); } } |