From 079929fd8c2aabbcc61695724e1447f265b334b4 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 dd1208ef6..bb689ad26 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); @@ -564,8 +564,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);