From: Michiel van Baak Date: Fri, 1 Aug 2008 10:55:27 +0000 (+0000) Subject: fix some potential deadlocks in chan_skinny X-Git-Tag: 1.4.22-rc1~42 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3f2b34e88803c0f2d6128b62f795d867cef6f274;p=thirdparty%2Fasterisk.git fix some potential deadlocks in chan_skinny (closes issue #13215) Reported by: qwell Patches: 2008080100_bug13215.diff.txt uploaded by mvanbaak (license 7) Tested by: mvanbaak git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@135055 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c index 2e796e7c40..80ce09201d 100644 --- a/channels/chan_skinny.c +++ b/channels/chan_skinny.c @@ -1476,6 +1476,7 @@ static int transmit_response(struct skinnysession *s, struct skinny_req *req) if (letohl(req->len > SKINNY_MAX_PACKET) || letohl(req->len < 0)) { ast_log(LOG_WARNING, "transmit_response: the length of the request is out of bounds\n"); + ast_mutex_unlock(&s->lock); return -1; } @@ -4819,6 +4820,7 @@ static int reload_config(void) if(setsockopt(skinnysock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1) { ast_log(LOG_ERROR, "Set Socket Options failed: errno %d, %s\n", errno, strerror(errno)); ast_config_destroy(cfg); + ast_mutex_unlock(&netlock); return 0; } if (skinnysock < 0) { @@ -4831,6 +4833,7 @@ static int reload_config(void) close(skinnysock); skinnysock = -1; ast_config_destroy(cfg); + ast_mutex_unlock(&netlock); return 0; } if (listen(skinnysock,DEFAULT_SKINNY_BACKLOG)) { @@ -4840,6 +4843,7 @@ static int reload_config(void) close(skinnysock); skinnysock = -1; ast_config_destroy(cfg); + ast_mutex_unlock(&netlock); return 0; } if (option_verbose > 1)