From 36dda31006e60f3860740260bf77fd606108a384 Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Wed, 23 Dec 2009 14:24:44 +0000 Subject: main/asterisk: patch to prevent run out of sockets fixes #227 --- main/asterisk/400-destroy-no-response-234131.patch | 39 ++++++++++++++++++++++ main/asterisk/APKBUILD | 4 ++- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 main/asterisk/400-destroy-no-response-234131.patch (limited to 'main/asterisk') diff --git a/main/asterisk/400-destroy-no-response-234131.patch b/main/asterisk/400-destroy-no-response-234131.patch new file mode 100644 index 0000000000..16eef51090 --- /dev/null +++ b/main/asterisk/400-destroy-no-response-234131.patch @@ -0,0 +1,39 @@ +--- 1.6.0/channels/chan_sip.c 2009/12/10 16:24:36 234130 ++++ 1.6.0/channels/chan_sip.c 2009/12/10 16:30:22 234131 +@@ -4523,6 +4523,9 @@ + ast_queue_control(p->owner, AST_CONTROL_CONGESTION); + ast_channel_unlock(p->owner); + } ++ ++ /* Give the channel a chance to act before we proceed with destruction */ ++ sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT); + } + sip_pvt_unlock(p); + return 0; +@@ -5186,19 +5189,20 @@ + if (needcancel) { /* Outgoing call, not up */ + if (ast_test_flag(&p->flags[0], SIP_OUTGOING)) { + /* stop retransmitting an INVITE that has not received a response */ +- struct sip_pkt *cur; +- for (cur = p->packets; cur; cur = cur->next) { +- __sip_semi_ack(p, cur->seqno, cur->is_resp, cur->method ? cur->method : find_sip_method(cur->data)); +- } +- + /* if we can't send right now, mark it pending */ + if (p->invitestate == INV_CALLING) { + /* We can't send anything in CALLING state */ + ast_set_flag(&p->flags[0], SIP_PENDINGBYE); +- /* Do we need a timer here if we don't hear from them at all? */ ++ __sip_pretend_ack(p); ++ /* Do we need a timer here if we don't hear from them at all? Yes we do or else we will get hung dialogs and those are no fun. */ + sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT); + append_history(p, "DELAY", "Not sending cancel, waiting for timeout"); + } else { ++ struct sip_pkt *cur; ++ ++ for (cur = p->packets; cur; cur = cur->next) { ++ __sip_semi_ack(p, cur->seqno, cur->is_resp, cur->method ? cur->method : find_sip_method(cur->data)); ++ } + p->invitestate = INV_CANCELLED; + /* Send a new request: CANCEL */ + transmit_request(p, SIP_CANCEL, p->lastinvite, XMIT_RELIABLE, FALSE); diff --git a/main/asterisk/APKBUILD b/main/asterisk/APKBUILD index 48f880b75a..d76ed9567a 100644 --- a/main/asterisk/APKBUILD +++ b/main/asterisk/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Timo Teras pkgname=asterisk pkgver=1.6.0.20 -pkgrel=0 +pkgrel=1 pkgdesc="Asterisk: A Module Open Source PBX System" url="http://www.asterisk.org/" license="GPL" @@ -20,6 +20,7 @@ source="http://downloads.digium.com/pub/asterisk/releases/$pkgname-$pkgver.tar.g 103-rundir.patch 201-incomplete.patch 301-libpri-autoconf.patch + 400-destroy-no-response-234131.patch asterisk.initd asterisk.confd asterisk.logrotate" @@ -97,6 +98,7 @@ b00c9d98ce2ad445501248a197c6e436 100-uclibc-daemon.patch 5008f51c737ec91f5047519bc9f25b85 103-rundir.patch 57825b74526187075ff7cb6816c55467 201-incomplete.patch 5771a5ab34b187dbfe8e23950b04213b 301-libpri-autoconf.patch +e35d40d688f6e4e4034c7aca8f955f46 400-destroy-no-response-234131.patch 0ce3219e05f55af884a7dc6b99c2b276 asterisk.initd ed31d7ba37bcf8b0346dcf8593c395f0 asterisk.confd 3e65172275684373e1a25c8a11224411 asterisk.logrotate" -- cgit v1.2.3