]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
tasklet: relpace tsk_allocated with tsk_free, fixes #2972
authorJaroslav Kysela <perex@perex.cz>
Fri, 24 Feb 2017 19:24:52 +0000 (20:24 +0100)
committerJaroslav Kysela <perex@perex.cz>
Fri, 24 Feb 2017 19:24:52 +0000 (20:24 +0100)
src/main.c
src/tvheadend.h

index f6c9af4d9550b901188a039ce51eb511cdaf3cbf..7c2aac2a1d5fefc2d600934f36d5d6d90dc81706 100644 (file)
@@ -370,7 +370,7 @@ tasklet_arm_alloc(tsk_callback_t *callback, void *opaque)
   tasklet_t *tsk = calloc(1, sizeof(*tsk));
   if (tsk) {
     memoryinfo_alloc(&tasklet_memoryinfo, sizeof(*tsk));
-    tsk->tsk_allocated = 1;
+    tsk->tsk_free = free;
     tasklet_arm(tsk, callback, opaque);
   }
   return tsk;
@@ -410,8 +410,7 @@ tasklet_disarm(tasklet_t *tsk)
     TAILQ_REMOVE(&tasklets, tsk, tsk_link);
     tsk->tsk_callback(tsk->tsk_opaque, 1);
     tsk->tsk_callback = NULL;
-    if (tsk->tsk_allocated)
-      free(tsk);
+    if (tsk->tsk_free) tsk->tsk_free(tsk);
   }
 
   pthread_mutex_unlock(&tasklet_lock);
@@ -428,9 +427,9 @@ tasklet_flush()
     TAILQ_REMOVE(&tasklets, tsk, tsk_link);
     tsk->tsk_callback(tsk->tsk_opaque, 1);
     tsk->tsk_callback = NULL;
-    if (tsk->tsk_allocated) {
+    if (tsk->tsk_free) {
       memoryinfo_free(&tasklet_memoryinfo, sizeof(*tsk));
-      free(tsk);
+      tsk->tsk_free(tsk);
     }
   }
 
@@ -456,14 +455,14 @@ tasklet_thread ( void *aux )
       tvh_cond_wait(&tasklet_cond, &tasklet_lock);
       continue;
     }
-    /* the callback might re-initialize tasklet, save everythin */
+    /* the callback might re-initialize tasklet, save everything */
     TAILQ_REMOVE(&tasklets, tsk, tsk_link);
     tsk_cb = tsk->tsk_callback;
     opaque = tsk->tsk_opaque;
     tsk->tsk_callback = NULL;
-    if (tsk->tsk_allocated) {
+    if (tsk->tsk_free) {
       memoryinfo_free(&tasklet_memoryinfo, sizeof(*tsk));
-      free(tsk);
+      tsk->tsk_free(tsk);
     }
     /* now, the callback can be safely called */
     if (tsk_cb) {
index f147a5a1964b690ebcd902490cf8ef622c6847c1..ec8d8b92547ff0d1ab3378cb07b218c824ef42d1 100644 (file)
@@ -233,7 +233,7 @@ typedef struct tasklet {
   TAILQ_ENTRY(tasklet) tsk_link;
   tsk_callback_t *tsk_callback;
   void *tsk_opaque;
-  int tsk_allocated;
+  void (*tsk_free)(void *);
 } tasklet_t;
 
 tasklet_t *tasklet_arm_alloc(tsk_callback_t *callback, void *opaque);