ref: 7b7ca65bfc15b1dc47a0f1063b66d0e85fba849b
parent: 2ff6d35064919a8ad9e56150a19dc7ccd3ec2e7e
author: Jim Bankoski <jimbankoski@google.com>
date: Tue Sep 11 12:30:19 EDT 2012
fix valgrind mem leak on garbage decode Multiple decoders were getting allocated per frame. If the decoder crashed we exitted with out freeing them and the next time in we'd allocate over. This fix removes the allocation and just has 8 boolcoders in the pbi structure Change-Id: I638b5bda23b622b43b7992aec21dd7cf6f6278da
--- a/vp8/decoder/decodframe.c
+++ b/vp8/decoder/decodframe.c
@@ -831,9 +831,7 @@
num_token_partitions = 1 << pbi->common.multi_token_partition;
if (num_token_partitions > 1)
{
- CHECK_MEM_ERROR(pbi->mbc, vpx_malloc(num_token_partitions *
- sizeof(vp8_reader)));
- bool_decoder = pbi->mbc;
+ bool_decoder = &pbi->mbc[0];
}
/* Check for partitions within the fragments and unpack the fragments
@@ -907,17 +905,7 @@
#endif
}
-static void stop_token_decoder(VP8D_COMP *pbi)
-{
- VP8_COMMON *pc = &pbi->common;
- if (pc->multi_token_partition != ONE_PARTITION)
- {
- vpx_free(pbi->mbc);
- pbi->mbc = NULL;
- }
-}
-
static void init_frame(VP8D_COMP *pbi)
{
VP8_COMMON *const pc = & pbi->common;
@@ -1440,8 +1428,6 @@
decode_mb_rows(pbi);
corrupt_tokens |= xd->corrupted;
}
-
- stop_token_decoder(pbi);
/* Collect information about decoder corruption. */
/* 1. Check first boolean decoder for errors. */
--- a/vp8/decoder/onyxd_if.c
+++ b/vp8/decoder/onyxd_if.c
@@ -120,7 +120,6 @@
vp8_de_alloc_overlap_lists(pbi);
#endif
vp8_remove_common(&pbi->common);
- vpx_free(pbi->mbc);
vpx_free(pbi);
}
--- a/vp8/decoder/onyxd_int.h
+++ b/vp8/decoder/onyxd_int.h
@@ -77,7 +77,7 @@
/* end of threading data */
#endif
- vp8_reader *mbc;
+ vp8_reader mbc[8];
int64_t last_time_stamp;
int ready_for_new_data;
--
⑨