timeshift: fix use after free() bug.

This commit is contained in:
Adam Sutton 2012-12-21 21:50:05 +00:00
parent 4e67a1345e
commit 551e5ff8f9

View 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;
}