diff --git a/drivers/media/test-drivers/vidtv/vidtv_psi.c b/drivers/media/test-drivers/vidtv/vidtv_psi.c index 1b6225d65..0970c0cdc 100644 --- a/drivers/media/test-drivers/vidtv/vidtv_psi.c +++ b/drivers/media/test-drivers/vidtv/vidtv_psi.c @@ -893,6 +893,9 @@ vidtv_psi_pat_program_assign(struct vidtv_psi_table_pat *pat, program = program->next; } + /* The table owns the list, so free the one being replaced */ + vidtv_psi_pat_program_destroy(pat->program); + pat->num_pat = program_count; pat->program = p; @@ -1432,6 +1435,9 @@ vidtv_psi_sdt_service_assign(struct vidtv_psi_table_sdt *sdt, if (service == sdt->service) return; + /* The table owns the list, so free the one being replaced */ + vidtv_psi_sdt_service_destroy(sdt->service); + sdt->service = service; /* recompute section length */ @@ -1781,6 +1787,9 @@ void vidtv_psi_eit_event_assign(struct vidtv_psi_table_eit *eit, if (e == eit->event) return; + /* The table owns the list, so free the one being replaced */ + vidtv_psi_eit_event_destroy(eit->event); + eit->event = e; vidtv_psi_eit_table_update_sec_len(eit);