]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
tsfile: keep valgrind happy (fix memory leaks)
authorJaroslav Kysela <perex@perex.cz>
Mon, 1 Dec 2014 19:48:13 +0000 (20:48 +0100)
committerJaroslav Kysela <perex@perex.cz>
Mon, 1 Dec 2014 19:48:28 +0000 (20:48 +0100)
src/input/mpegts.h
src/input/mpegts/mpegts_mux.c
src/input/mpegts/tsfile/tsfile.c
src/input/mpegts/tsfile/tsfile_mux.c
src/input/mpegts/tsfile/tsfile_private.h

index abc47ff7546af440ee1d356d6f13a13f742ae26d..4e66f278831794ce39c42d08350eb8d06a6a0c30 100644 (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 );
 
index dbb17f0c2610fc8d6f5559be677d4e8035a550ce..246ae15b5fa1fc41a3c44a50332e85ae83d92ba0 100644 (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 )
 {
index 19d1ea99d86b4b66e0d123ac0fd6b531ae40b544..1cfc4e31af187b6f65499de3f1c30f5f38da60f2 100644 (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)
index c27a223288c2be74cf5bc0f329f38f1726a44134..d1451ab4fcc0c16054b1da4b6ea037922496c971 100644 (file)
 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;
 }
index 739f6a126c4e4b303e995702f07671533ea525f0..57003fb18ea7c7ad0ac5fa548b1ecf2af00cde13 100644 (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;