Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
descrambler: fix s_stream_mutex locking in descrambler_notify_deliver()
  • Loading branch information
perexg committed Mar 20, 2016
1 parent 9fd6578 commit 54b57cf
Showing 1 changed file with 6 additions and 9 deletions.
15 changes: 6 additions & 9 deletions src/descrambler/descrambler.c
Expand Up @@ -334,16 +334,15 @@ descrambler_caid_changed ( service_t *t )
}

static void
descrambler_notify_deliver( mpegts_service_t *t, descramble_info_t *di, int locked )
descrambler_notify_deliver( mpegts_service_t *t, descramble_info_t *di )
{
streaming_message_t *sm;
int r;

pthread_mutex_lock(&t->s_stream_mutex);
lock_assert(&t->s_stream_mutex);
if (!t->s_descramble_info)
t->s_descramble_info = calloc(1, sizeof(*di));
r = memcmp(t->s_descramble_info, di, sizeof(*di));
pthread_mutex_unlock(&t->s_stream_mutex);
if (r == 0) { /* identical */
free(di);
return;
Expand All @@ -353,11 +352,7 @@ descrambler_notify_deliver( mpegts_service_t *t, descramble_info_t *di, int lock
sm = streaming_msg_create(SMT_DESCRAMBLE_INFO);
sm->sm_data = di;

if (!locked)
pthread_mutex_lock(&t->s_stream_mutex);
streaming_pad_deliver(&t->s_streaming_pad, sm);
if (!locked)
pthread_mutex_unlock(&t->s_stream_mutex);
}

static void
Expand All @@ -371,7 +366,7 @@ descrambler_notify_nokey( th_descrambler_runtime_t *dr )
di = calloc(1, sizeof(*di));
di->pid = t->s_pmt_pid;

descrambler_notify_deliver(t, di, 1);
descrambler_notify_deliver(t, di);
}

void
Expand Down Expand Up @@ -406,7 +401,9 @@ descrambler_notify( th_descrambler_t *td,
strncpy(di->from, from, sizeof(di->protocol)-1);
strncpy(di->protocol, protocol, sizeof(di->protocol)-1);

descrambler_notify_deliver(t, di, 0);
pthread_mutex_lock(&t->s_stream_mutex);
descrambler_notify_deliver(t, di);
pthread_mutex_unlock(&t->s_stream_mutex);
}

int
Expand Down

0 comments on commit 54b57cf

Please sign in to comment.