tsfile: keep valgrind happy (fix memory leaks)

This commit is contained in:
Jaroslav Kysela 2014-12-01 20:48:13 +01:00
parent f63d16f605
commit bbed9a309e
5 changed files with 23 additions and 8 deletions

View file

@ -739,6 +739,9 @@ mpegts_service_t *mpegts_mux_find_service(mpegts_mux_t *ms, uint16_t sid);
(struct type*)mpegts_mux_instance_create0(calloc(1, sizeof(struct type)),\
&type##_class, uuid,\
mi, mm);
void mpegts_mux_instance_delete ( mpegts_mux_instance_t *mmi );
int mpegts_mux_instance_start
( mpegts_mux_instance_t **mmiptr );

View file

@ -41,7 +41,7 @@ const idclass_t mpegts_mux_instance_class =
.ic_perm_def = ACCESS_ADMIN
};
static void
void
mpegts_mux_instance_delete
( mpegts_mux_instance_t *mmi )
{

View file

@ -27,7 +27,7 @@
* Globals
*/
pthread_mutex_t tsfile_lock;
mpegts_network_t tsfile_network;
mpegts_network_t *tsfile_network;
tsfile_input_list_t tsfile_inputs;
extern const idclass_t mpegts_service_class;
@ -70,18 +70,19 @@ void tsfile_init ( int tuners )
pthread_mutex_init(&tsfile_lock, NULL);
/* Shared network */
mpegts_network_create0(&tsfile_network, &mpegts_network_class, NULL,
tsfile_network = calloc(1, sizeof(*tsfile_network));
mpegts_network_create0(tsfile_network, &mpegts_network_class, NULL,
"TSfile Network", NULL);
tsfile_network.mn_create_service = tsfile_network_create_service;
tsfile_network->mn_create_service = tsfile_network_create_service;
/* IPTV like setup */
if (tuners <= 0) {
mi = tsfile_input_create(0);
mpegts_input_add_network((mpegts_input_t*)mi, &tsfile_network);
mpegts_input_add_network((mpegts_input_t*)mi, tsfile_network);
} else {
for (i = 0; i < tuners; i++) {
mi = tsfile_input_create(i+1);
mpegts_input_add_network((mpegts_input_t*)mi, &tsfile_network);
mpegts_input_add_network((mpegts_input_t*)mi, tsfile_network);
}
}
}
@ -100,6 +101,7 @@ tsfile_done ( void )
mpegts_input_delete((mpegts_input_t*)mi, 0);
// doesn't close the pipe!
}
mpegts_network_class_delete(&mpegts_network_class, 1);
pthread_mutex_unlock(&global_lock);
}
@ -125,7 +127,7 @@ void tsfile_add_file ( const char *path )
tvhtrace("tsfile", "add file %s (uuid:%s)", path, uuid);
/* Create logical instance */
mm = tsfile_mux_create(uuid, &tsfile_network);
mm = tsfile_mux_create(uuid, tsfile_network);
/* Create physical instance (for each tuner) */
LIST_FOREACH(mi, &tsfile_inputs, tsi_link)

View file

@ -22,6 +22,15 @@
extern const idclass_t mpegts_mux_class;
extern const idclass_t mpegts_mux_instance_class;
static void
tsfile_mux_instance_delete( mpegts_mux_instance_t *_mmi )
{
tsfile_mux_instance_t *mmi = (tsfile_mux_instance_t *)_mmi;
free(mmi->mmi_tsfile_path);
mpegts_mux_instance_delete(_mmi);
}
tsfile_mux_instance_t *
tsfile_mux_instance_create
( const char *path, mpegts_input_t *mi, mpegts_mux_t *mm )
@ -32,6 +41,7 @@ tsfile_mux_instance_create
#undef tsfile_mux_instance_class
mmi->mmi_tsfile_path = strdup(path);
mmi->mmi_tsfile_pcr_pid = MPEGTS_PID_NONE;
mmi->mmi_delete = tsfile_mux_instance_delete;
tvhtrace("tsfile", "mmi created %p path %s", mmi, mmi->mmi_tsfile_path);
return mmi;
}

View file

@ -32,7 +32,7 @@ typedef LIST_HEAD(,tsfile_input) tsfile_input_list_t;
/*
* Globals
*/
extern mpegts_network_t tsfile_network;
extern mpegts_network_t *tsfile_network;
extern tsfile_input_list_t tsfile_inputs;
extern pthread_mutex_t tsfile_lock;