diff options
author | Tom Rondeau <tom@trondeau.com> | 2014-05-21 12:09:07 -0400 |
---|---|---|
committer | Tom Rondeau <tom@trondeau.com> | 2014-05-21 12:09:07 -0400 |
commit | cba2d184e2abb8a52353929a34b562ea4f9bd031 (patch) | |
tree | 226b3a032ea35d896744c1bfb0a28c4331367457 /gr-fec | |
parent | 47506477c57f114d42ad8bf9594fb32da8ba4d87 (diff) |
fec: fixing a bit of sloppy memory handling in the cc decoder.
Diffstat (limited to 'gr-fec')
-rw-r--r-- | gr-fec/lib/cc_decoder_impl.cc | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/gr-fec/lib/cc_decoder_impl.cc b/gr-fec/lib/cc_decoder_impl.cc index 6739f7bf3d..4657d16d17 100644 --- a/gr-fec/lib/cc_decoder_impl.cc +++ b/gr-fec/lib/cc_decoder_impl.cc @@ -83,9 +83,9 @@ namespace gr { switch(d_mode) { case(CC_TAILBITING): d_end_state = &d_end_state_chaining; + d_veclen = d_frame_size + (6 * (d_k - 1)); d_managed_in = (unsigned char*)volk_malloc(d_veclen*d_rate*sizeof(unsigned char), volk_get_alignment()); - d_veclen = d_frame_size + (6 * (d_k - 1)); d_managed_in_size = d_veclen * d_rate; if(d_managed_in == NULL) { throw std::runtime_error("cc_decoder: bad alloc for d_managed_in\n"); @@ -120,7 +120,7 @@ namespace gr { d_vp->metrics1.t = d_vp->metrics; d_vp->metrics2.t = d_vp->metrics + d_numstates; - d_vp->decisions = (unsigned char*)volk_malloc(d_veclen*d_decision_t_size, + d_vp->decisions = (unsigned char*)volk_malloc(sizeof(unsigned char)*d_veclen*d_decision_t_size, volk_get_alignment()); if(d_vp->decisions == NULL) { throw std::runtime_error("bad alloc for d_vp->decisions!\n"); @@ -160,9 +160,13 @@ namespace gr { cc_decoder_impl::~cc_decoder_impl() { - free(d_vp->decisions); - free(Branchtab); - free(d_vp->metrics); + volk_free(d_vp->decisions); + volk_free(Branchtab); + volk_free(d_vp->metrics); + + if(d_mode == CC_TAILBITING) { + volk_free(d_managed_in); + } } int |