]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
timeshift: fix use after free() bug.
authorAdam Sutton <dev@adamsutton.me.uk>
Fri, 21 Dec 2012 21:50:05 +0000 (21:50 +0000)
committerAdam Sutton <dev@adamsutton.me.uk>
Wed, 9 Jan 2013 21:26:51 +0000 (21:26 +0000)
src/timeshift.c

index ebbb0c647c9b63099cd731b510278584dd4ccd1f..116575135ac72f937a2a7c3f74c89b239d83cffc 100644 (file)
@@ -56,6 +56,7 @@ void timeshift_term ( void )
 static void timeshift_input
   ( void *opaque, streaming_message_t *sm )
 {
+  int exit = 0;
   timeshift_t *ts = opaque;
 
   pthread_mutex_lock(&ts->state_mutex);
@@ -81,6 +82,11 @@ static void timeshift_input
       streaming_target_deliver2(ts->output, streaming_msg_clone(sm));
     }
 
+    /* Check for exit */
+    if (sm->sm_type == SMT_EXIT ||
+        (sm->sm_type == SMT_STOP && sm->sm_code == 0))
+      exit = 1;
+
     /* Buffer to disk */
     if (ts->state >= TS_LIVE) {
       sm->sm_time = getmonoclock();
@@ -89,8 +95,7 @@ static void timeshift_input
       streaming_msg_free(sm);
 
     /* Exit/Stop */
-    if (sm->sm_type == SMT_EXIT ||
-        (sm->sm_type == SMT_STOP && sm->sm_code == 0)) {
+    if (exit) {
       timeshift_write_exit(ts->rd_pipe.wr);
       ts->state = TS_EXIT;
     }