From 9879bea79deca674135c26482db6eb43770d14c9 Mon Sep 17 00:00:00 2001 From: Mooneer Salem Date: Thu, 28 Mar 2024 12:30:00 -0700 Subject: More memory leak and crash fixes. --- src/cohpsk_put_test_bits.c | 3 +++ src/fmfsk.c | 1 + src/freedv_api.c | 2 ++ src/freedv_fsk.c | 4 ++-- src/freedv_vhf_framing.c | 1 + 5 files changed, 9 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/cohpsk_put_test_bits.c b/src/cohpsk_put_test_bits.c index de41da2..74aa51e 100644 --- a/src/cohpsk_put_test_bits.c +++ b/src/cohpsk_put_test_bits.c @@ -65,11 +65,13 @@ int main(int argc, char *argv[]) { } coh = cohpsk_create(); + assert(coh != NULL); foct = NULL; logframes = 0; if (argc == 3) { if ((foct = fopen(argv[2], "wt")) == NULL) { + cohpsk_destroy(coh); fprintf(stderr, "Error opening output Octave file: %s: %s.\n", argv[2], strerror(errno)); exit(1); @@ -101,6 +103,7 @@ int main(int argc, char *argv[]) { } fclose(fin); + cohpsk_destroy(coh); float ber = (float)nerrors / nbits; fprintf(stderr, "BER: %4.3f Nbits: %d Nerrors: %d\n", ber, nbits, nerrors); diff --git a/src/fmfsk.c b/src/fmfsk.c index b1745fa..c6dd6d9 100644 --- a/src/fmfsk.c +++ b/src/fmfsk.c @@ -93,6 +93,7 @@ struct FMFSK *fmfsk_create(int Fs, int Rb) { * Destroys an fmfsk modem and deallocates memory */ void fmfsk_destroy(struct FMFSK *fmfsk) { + free(fmfsk->stats); free(fmfsk->oldsamps); free(fmfsk); } diff --git a/src/freedv_api.c b/src/freedv_api.c index 5172959..11ed910 100644 --- a/src/freedv_api.c +++ b/src/freedv_api.c @@ -214,11 +214,13 @@ void freedv_close(struct freedv *freedv) { if (FDV_MODE_ACTIVE(FREEDV_MODE_2400A, freedv->mode) || FDV_MODE_ACTIVE(FREEDV_MODE_800XA, freedv->mode)) { + FREE(freedv->tx_bits); fsk_destroy(freedv->fsk); fvhff_destroy_deframer(freedv->deframer); } if (FDV_MODE_ACTIVE(FREEDV_MODE_2400B, freedv->mode)) { + FREE(freedv->tx_bits); fmfsk_destroy(freedv->fmfsk); fvhff_destroy_deframer(freedv->deframer); } diff --git a/src/freedv_fsk.c b/src/freedv_fsk.c index ea346c2..dfc7b98 100644 --- a/src/freedv_fsk.c +++ b/src/freedv_fsk.c @@ -91,7 +91,7 @@ void freedv_2400b_open(struct freedv *f) { f->n_codec_frames = 1; f->bits_per_codec_frame = codec2_bits_per_frame(f->codec2); f->bits_per_modem_frame = f->bits_per_codec_frame; - int n_packed_bytes = (f->bits_per_modem_frame + 7) / 8; + int n_packed_bytes = (f->bits_per_modem_frame + 7) / 8 + 1; f->tx_payload_bits = MALLOC(n_packed_bytes); assert(f->tx_payload_bits != NULL); f->rx_payload_bits = MALLOC(n_packed_bytes); @@ -123,7 +123,7 @@ void freedv_800xa_open(struct freedv *f) { f->bits_per_codec_frame = codec2_bits_per_frame(f->codec2); f->bits_per_modem_frame = f->n_codec_frames * f->bits_per_codec_frame; - int n_packed_bytes = (f->bits_per_modem_frame + 7.0) / 8.0 + 0.5; + int n_packed_bytes = (f->bits_per_modem_frame + 7) / 8; f->tx_payload_bits = MALLOC(n_packed_bytes); assert(f->tx_payload_bits != NULL); f->rx_payload_bits = MALLOC(n_packed_bytes); diff --git a/src/freedv_vhf_framing.c b/src/freedv_vhf_framing.c index d596025..37dbaf3 100644 --- a/src/freedv_vhf_framing.c +++ b/src/freedv_vhf_framing.c @@ -391,6 +391,7 @@ int fvhff_get_varicode_size(struct freedv_vhf_deframer *def) { void fvhff_destroy_deframer(struct freedv_vhf_deframer *def) { freedv_data_channel_destroy(def->fdc); free(def->bits); + free(def->invbits); free(def); } -- cgit v1.2.3