Skip to content

Commit e22215f

Browse files
PunitLodhaIshanGrover2004
authored andcommitted
Fix memory leaks
1 parent fc06c95 commit e22215f

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
@@ -1200,12 +1200,10 @@ impl dtvcc_service_decoder {
12001200
}
12011201

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

12101208
let mut screen_content_changed = false;
12111209
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
@@ -118,14 +118,20 @@ extern "C" fn ccxr_dtvcc_free(dtvcc_rust: *mut Dtvcc) {
118118

119119
// Drop all windows row
120120
window.rows.iter().for_each(|symbol_ptr| unsafe {
121-
symbol_ptr.drop_in_place();
121+
drop(Box::from_raw(*symbol_ptr));
122122
});
123123

124124
window.memory_reserved = 0;
125125
});
126126

127-
unsafe { decoder.tv.drop_in_place() };
127+
unsafe {
128+
drop(Box::from_raw(decoder.tv));
129+
};
128130
}
131+
132+
unsafe {
133+
drop(Box::from_raw(dtvcc));
134+
};
129135
}
130136

131137
#[no_mangle]

0 commit comments

Comments
 (0)