Skip to content

Commit baaeadb

Browse files
PunitLodhaIshanGrover2004
authored andcommitted
Fix memory leaks
1 parent 2188990 commit baaeadb

File tree

5 files changed

+13
-10
lines changed

5 files changed

+13
-10
lines changed

src/lib_ccx/ccx_decoders_common.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ made to reuse, not duplicate, as many functions as possible */
1717

1818
#ifndef DISABLE_RUST
1919
extern int ccxr_process_cc_data(struct lib_cc_decode *dec_ctx, unsigned char *cc_data, int cc_count);
20-
extern void ccxr_flush_decoder(void *dtvcc_rust, struct dtvcc_service_decoder *decoder);
2120
#endif
2221

2322
uint64_t utc_refvalue = UINT64_MAX; /* _UI64_MAX/UINT64_MAX means don't use UNIX, 0 = use current system time as reference, +1 use a specific reference */

src/lib_ccx/general_loop.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1282,7 +1282,7 @@ int rcwt_loop(struct lib_ccx_ctx *ctx)
12821282
#ifndef DISABLE_RUST
12831283
ccxr_dtvcc_set_encoder(dec_ctx->dtvcc_rust, enc_ctx);
12841284
#else
1285-
dec_ctx->dtvcc->encoder = (void *)enc_ctx; // WARN: otherwise cea-708 will not work
1285+
dec_ctx->dtvcc->encoder = (void *)enc_ctx; // WARN: otherwise cea-708 will not work
12861286
#endif
12871287

12881288
if (parsebuf[6] == 0 && parsebuf[7] == 2)

src/rust/src/decoder/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ extern "C" fn ccxr_flush_active_decoders(ctx_ptr: *mut lib_cc_decode) {
279279
}
280280
if decoder.cc_count > 0 {
281281
ctx.current_field = 3;
282-
ccxr_flush_decoder(ctx.dtvcc_rust as *mut Dtvcc, Box::into_raw(decoder));
282+
ccxr_flush_decoder(dtvcc_rust, decoder);
283283
}
284284
}
285285
}

src/rust/src/decoder/service_decoder.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1202,12 +1202,10 @@ impl dtvcc_service_decoder {
12021202
}
12031203

12041204
/// Flush service decoder
1205-
#[no_mangle]
1206-
pub extern "C" fn ccxr_flush_decoder(dtvcc_rust: *mut Dtvcc, decoder: *mut dtvcc_service_decoder) {
1205+
pub fn ccxr_flush_decoder(dtvcc_rust: &mut Dtvcc, mut decoder: Box<dtvcc_service_decoder>) {
12071206
debug!("dtvcc_decoder_flush: Flushing decoder");
1208-
let timing = unsafe { &mut *((*dtvcc_rust).timing) };
1209-
let encoder = unsafe { &mut *((*dtvcc_rust).encoder) };
1210-
let decoder = unsafe { &mut *decoder };
1207+
let timing = &mut dtvcc_rust.timing;
1208+
let encoder = unsafe { &mut *(dtvcc_rust.encoder) };
12111209

12121210
let mut screen_content_changed = false;
12131211
for i in 0..CCX_DTVCC_MAX_WINDOWS {

src/rust/src/lib.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,20 @@ extern "C" fn ccxr_dtvcc_free(dtvcc_rust: *mut Dtvcc) {
8989

9090
// Drop all windows row
9191
window.rows.iter().for_each(|symbol_ptr| unsafe {
92-
symbol_ptr.drop_in_place();
92+
drop(Box::from_raw(*symbol_ptr));
9393
});
9494

9595
window.memory_reserved = 0;
9696
});
9797

98-
unsafe { decoder.tv.drop_in_place() };
98+
unsafe {
99+
drop(Box::from_raw(decoder.tv));
100+
};
99101
}
102+
103+
unsafe {
104+
drop(Box::from_raw(dtvcc));
105+
};
100106
}
101107

102108
#[no_mangle]

0 commit comments

Comments
 (0)