]> git.pld-linux.org Git - packages/asterisk.git/commitdiff
patch to fix chan_pjsip crash on DNS errors
authorJacek Konieczny <j.konieczny@eggsoft.pl>
Fri, 3 Feb 2017 08:24:13 +0000 (09:24 +0100)
committerJacek Konieczny <j.konieczny@eggsoft.pl>
Fri, 3 Feb 2017 08:24:13 +0000 (09:24 +0100)
fixes:
https://issues.asterisk.org/jira/browse/ASTERISK-26679
https://issues.asterisk.org/jira/browse/ASTERISK-26699

ASTERISK-26679.patch [new file with mode: 0644]
asterisk.spec

diff --git a/ASTERISK-26679.patch b/ASTERISK-26679.patch
new file mode 100644 (file)
index 0000000..a620162
--- /dev/null
@@ -0,0 +1,76 @@
+From e371e13b9eb6ce1f60bf31a8d25c7d4bdcd01d8d Mon Sep 17 00:00:00 2001
+From: Joshua Colp <jcolp@digium.com>
+Date: Tue, 31 Jan 2017 17:17:50 +0000
+Subject: [PATCH] res_pjsip: Handle invocation of callback on outgoing request when error occurs.
+
+There are some error cases in PJSIP when sending a request that will
+result in the callback for the request being invoked.  The code did not
+handle this case and assumed on every error case that the callback was not
+invoked.
+
+The code has been changed to check whether the callback has been invoked
+and if so to absorb the error and treat it as a success.
+
+ASTERISK-26679
+ASTERISK-26699
+
+Change-Id: I563982ba204da5aa1428989a11c06dd9087fea91
+---
+
+diff --git a/res/res_pjsip.c b/res/res_pjsip.c
+index 12c3baa..c35b782 100644
+--- a/res/res_pjsip.c
++++ b/res/res_pjsip.c
+@@ -3402,6 +3402,8 @@
+       void (*callback)(void *token, pjsip_event *e);
+       /*! Non-zero when the callback is called. */
+       unsigned int cb_called;
++      /*! Non-zero if endpt_send_request_cb() was called. */
++      unsigned int send_cb_called;
+       /*! Timeout timer. */
+       pj_timer_entry *timeout_timer;
+       /*! Original timeout. */
+@@ -3418,6 +3420,12 @@
+ {
+       struct send_request_wrapper *req_wrapper = token;
+       unsigned int cb_called;
++
++      /*
++       * Needed because we cannot otherwise tell if this callback was
++       * called when pjsip_endpt_send_request() returns error.
++       */
++      req_wrapper->send_cb_called = 1;
+       if (e->body.tsx_state.type == PJSIP_EVENT_TIMER) {
+               ast_debug(2, "%p: PJSIP tsx timer expired\n", req_wrapper);
+@@ -3602,12 +3610,10 @@
+       if (ret_val != PJ_SUCCESS) {
+               char errmsg[PJ_ERR_MSG_SIZE];
+-              /*
+-               * endpt_send_request_cb is not expected to ever be called
+-               * because the request didn't get far enough to attempt
+-               * sending.
+-               */
+-              ao2_ref(req_wrapper, -1);
++              if (!req_wrapper->send_cb_called) {
++                      /* endpt_send_request_cb is not expected to ever be called now. */
++                      ao2_ref(req_wrapper, -1);
++              }
+               /* Complain of failure to send the request. */
+               pj_strerror(ret_val, errmsg, sizeof(errmsg));
+@@ -3644,6 +3650,13 @@
+                               req_wrapper->cb_called = 1;
+                       }
+                       ao2_unlock(req_wrapper);
++              } else if (req_wrapper->cb_called) {
++                      /*
++                       * We cannot report any error.  The callback has
++                       * already freed any resources associated with
++                       * token.
++                       */
++                      ret_val = PJ_SUCCESS;
+               }
+       }
index 0a8660f29ba7bd812646550c54c69699545fc579..ad52c9e5481e0c557dc874bb4b69dd614ed50491 100644 (file)
@@ -38,7 +38,7 @@ Summary:      Asterisk PBX
 Summary(pl.UTF-8):     Centralka (PBX) Asterisk
 Name:          asterisk
 Version:       13.13.1
-Release:       1
+Release:       2
 License:       GPL v2
 Group:         Applications/System
 Source0:       http://downloads.digium.com/pub/asterisk/releases/%{name}-%{version}.tar.gz
@@ -63,6 +63,7 @@ Patch5:               %{name}-histedit.patch
 Patch6:                x32.patch
 Patch7:                %{name}-ilbc.patch
 Patch8:                asterisk-opus.patch
+Patch9:                ASTERISK-26679.patch
 URL:           http://www.asterisk.org/
 BuildRequires: OSPToolkit-devel >= 4.0.0
 %{?with_oss:BuildRequires:     SDL-devel}
@@ -756,6 +757,7 @@ Dokumentacja API Asteriska.
 %patch5 -p1
 %patch6 -p1
 %patch7 -p1
+%patch9 -p1
 
 %if %{with opus_vp8}
 %patch8 -p1
This page took 0.07689 seconds and 4 git commands to generate.