From 15640991d7fc9d398749f77460b821296cccdcb6 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 2 Jul 2014 13:37:09 -0400 Subject: [PATCH] fix possible deadlock --- daemon/call_interfaces.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index 7cddb9333..ec62ddfc0 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -287,9 +287,9 @@ static str *call_request_lookup_tcp(char **out, struct callmaster *m, enum call_ monologue_offer_answer(monologue, &s, NULL); ret = streams_print(&monologue->medias, 1, s.length, NULL, SAF_TCP); - rwlock_unlock_w(&c->master_lock); out2: + rwlock_unlock_w(&c->master_lock); streams_free(&s); redis_update(c, m->conf.redis); @@ -590,8 +590,11 @@ static const char *call_offer_answer_ng(bencode_item_t *input, struct callmaster monologue = call_get_mono_dialogue(call, &fromtag, &totag); errstr = "Invalid dialogue association"; - if (!monologue) + if (!monologue) { + rwlock_unlock_w(&call->master_lock); + obj_put(call); goto out; + } chopper = sdp_chopper_new(&sdp); bencode_buffer_destroy_add(output->buffer, (free_func_t) sdp_chopper_destroy, chopper);