Compare commits

...

20 Commits

Author SHA1 Message Date
kharwell
3cdb24a93c ChangeLog: Updated for 11.21.0 2016-01-15 13:44:36 -05:00
kharwell
1829955c12 Release summaries: Add summaries for 11.21.0 2016-01-15 13:44:29 -05:00
Kevin Harwell
8720b171ce Release summaries: Remove previous versions 2016-01-15 12:42:57 -06:00
kharwell
731f22c9e8 .version: Update for 11.21.0 2016-01-15 13:42:57 -05:00
kharwell
2d8ed745d8 .lastclean: Update for 11.21.0 2016-01-15 13:42:56 -05:00
kharwell
b4eef8b8d4 ChangeLog: Updated for 11.21.0-rc3 2016-01-12 10:24:27 -05:00
kharwell
c09fbe1248 Release summaries: Add summaries for 11.21.0-rc3 2016-01-12 10:24:20 -05:00
Kevin Harwell
a2a4b93864 Release summaries: Remove previous versions 2016-01-12 09:24:12 -06:00
kharwell
0f399a5a5f .version: Update for 11.21.0-rc3 2016-01-12 10:24:12 -05:00
kharwell
1d6ac3f797 .lastclean: Update for 11.21.0-rc3 2016-01-12 10:24:11 -05:00
Kevin Harwell
e909f4a78c pbx: Deadlock between contexts container and context_merge locks
Recent changes (ASTERISK-25394 commit 2bd27d1222)
introduced the possibility of a deadlock. Due to the mentioned modifications
ast_change_hints now needs to keep both merge/delete and state callbacks from
occurring while it executes. Unfortunately, sometimes ast_change_hints can be
called with the contexts container locked. When this happens it's possible for
another thread to grab the context_merge_lock before the thread calling into
ast_change_hints does and then try to obtain the contexts container lock. This
of course causes a deadlock between the two threads. The thread calling into
ast_change_hints waits for the other thread to release context_merge_lock and
the other thread is waiting on that one to release the contexts container lock.

Unfortunately, there is not a great way to fix this problem. When hints change,
the subsequent state callbacks cannot run at the same time as a merge/delete,
nor when the usual state callbacks do. This patch alleviates the problem by
having those particular callbacks (the ones run after a hint change) occur in a
serialized task. By moving the context_merge_lock to a task it can now safely be
attempted or held without a deadlock occurring.

ASTERISK-25640 #close
Reported by: Krzysztof Trempala

Change-Id: If2210ea241afd1585dc2594c16faff84579bf302
2016-01-11 13:48:56 -06:00
kharwell
a2b5d4fa54 ChangeLog: Updated for 11.21.0-rc2 2015-12-18 13:08:22 -05:00
kharwell
45f8ba7cb3 Release summaries: Add summaries for 11.21.0-rc2 2015-12-18 13:08:14 -05:00
Kevin Harwell
aaff9871f3 Release summaries: Remove previous versions 2015-12-18 12:08:07 -06:00
kharwell
175c1afbb5 .version: Update for 11.21.0-rc2 2015-12-18 13:08:07 -05:00
kharwell
3183add62b .lastclean: Update for 11.21.0-rc2 2015-12-18 13:08:07 -05:00
kharwell
a07795c697 ChangeLog: Updated for 11.21.0-rc1 2015-12-15 11:53:16 -05:00
kharwell
2108015d2f Release summaries: Add summaries for 11.21.0-rc1 2015-12-15 11:52:01 -05:00
kharwell
a2e60af7ff .version: Update for 11.21.0-rc1 2015-12-15 11:50:44 -05:00
kharwell
58966343b3 .lastclean: Update for 11.21.0-rc1 2015-12-15 11:50:44 -05:00
7 changed files with 37734 additions and 311 deletions

1
.lastclean Normal file
View File

@@ -0,0 +1 @@
40

1
.version Normal file
View File

@@ -0,0 +1 @@
11.21.0

36834
ChangeLog Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,153 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><title>Release Summary - asterisk-11.21.0</title><h1 align="center"><a name="top">Release Summary</a></h1><h3 align="center">asterisk-11.21.0</h3><h3 align="center">Date: 2016-01-15</h3><h3 align="center">&lt;asteriskteam@digium.com&gt;</h3><hr><h2 align="center">Table of Contents</h2><ol>
<li><a href="#summary">Summary</a></li>
<li><a href="#contributors">Contributors</a></li>
<li><a href="#closed_issues">Closed Issues</a></li>
<li><a href="#commits">Other Changes</a></li>
<li><a href="#diffstat">Diffstat</a></li>
</ol><hr><a name="summary"><h2 align="center">Summary</h2></a><center><a href="#top">[Back to Top]</a></center><p>This release is a point release of an existing major version. The changes included were made to address problems that have been identified in this release series, or are minor, backwards compatible new features or improvements. Users should be able to safely upgrade to this version if this release series is already in use. Users considering upgrading from a previous version are strongly encouraged to review the UPGRADE.txt document as well as the CHANGES document for information about upgrading to this release series.</p><p>The data in this summary reflects changes that have been made since the previous release, asterisk-11.20.0.</p><hr><a name="contributors"><h2 align="center">Contributors</h2></a><center><a href="#top">[Back to Top]</a></center><p>This table lists the people who have submitted code, those that have tested patches, as well as those that reported issues on the issue tracker that were resolved in this release. For coders, the number is how many of their patches (of any size) were committed into this release. For testers, the number is the number of times their name was listed as assisting with testing a patch. Finally, for reporters, the number is the number of issues that they reported that were affected by commits that went into this release.</p><table width="100%" border="0">
<tr><th width="33%">Coders</th><th width="33%">Testers</th><th width="33%">Reporters</th></tr>
<tr valign="top"><td width="33%">14 Kevin Harwell <kharwell@lunkwill><br/>7 Richard Mudgett <rmudgett@digium.com><br/>5 Kevin Harwell <kharwell@lunkwill.digium.internal><br/>5 Alexander Traud <pabstraud@compuserve.com><br/>4 Walter Doekes <walter+asterisk@wjd.nu><br/>4 Joshua Colp <jcolp@digium.com><br/>3 Matt Jordan <mjordan@digium.com><br/>3 Ivan Poddubny <ivan.poddubny@gmail.com><br/>2 Corey Farrell <git@cfware.com><br/>1 Filip Jenicek <phill@janevim.cz><br/>1 Eugene Voityuk <eugene@thirdlane.com><br/>1 Steve Davies <steve@one47.co.uk><br/>1 Olle Johansson (License 5267)<br/>1 Florian Sauerteig <ffs@ccn.net><br/>1 Jonathan Rose <jrose@digium.com><br/>1 gtjoseph <george.joseph@fairview5.com><br/>1 server-pandora <server-pandora@xencall.com><br/>1 mdu113 <mulitskiy@acedsl.com><br/></td><td width="33%">1 gtjoseph<br/>1 starting asterisk -c until the colors stopped<br/></td><td width="33%">4 Alexander Traud <pabstraud@compuserve.com><br/>3 Walter Doekes <walter+asterisk@wjd.nu><br/>3 Joshua Colp <jcolp@digium.com><br/>3 Michael Keuter <lists@mksolutions.info><br/>3 Matt Jordan <mjordan@digium.com><br/>1 Rusty Newton <rnewton@digium.com><br/>1 ffs <ffs@ccn.net><br/>1 Andrew Nagy<br/>1 Ben Langfeld<br/>1 Kevin Harwell <kharwell@digium.com><br/>1 Krzysztof Trempala<br/>1 George Joseph <george.joseph@fairview5.com><br/>1 mdu113 <mulitskiy@acedsl.com><br/>1 Dudás József <jozsef.dudas@gmail.com><br/>1 Hiroaki Komatsu <komatsu.hiroaki@po.ntts.co.jp><br/>1 Ben Langfeld <ben@langfeld.me><br/>1 Rusty Newton<br/>1 Corey Farrell <git@cfware.com><br/>1 Bojan Nemčić<br/>1 Krzysztof Trempala <k.trempala@slican.pl><br/>1 Badalian Vyacheslav <slavon.net@gmail.com><br/>1 Olle Johansson <oej@edvina.net><br/>1 Sean Pimental<br/>1 Aleksei Kulakov <each.nir.vine@gmail.com><br/>1 gtjoseph<br/>1 Badalian Vyacheslav<br/>1 Olle Johansson<br/>1 Andrew Nagy <andrew.nagy@the159.com><br/>1 Filip Jenicek <phill@janevim.cz><br/>1 Dade Brandon <dade@xencall.com><br/>1 Bojan Nemčić <bojan.nemcic@voxdiversa.hr><br/>1 Richard Mudgett <rmudgett@digium.com><br/>1 dea <dan_austin@fitawi.com><br/></td></tr>
</table><hr><a name="closed_issues"><h2 align="center">Closed Issues</h2></a><center><a href="#top">[Back to Top]</a></center><p>This is a list of all issues from the issue tracker that were closed by changes that went into this release.</p><h3>Bug</h3><h4>Category: Addons/General</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25640">ASTERISK-25640</a>: pbx: Deadlock on features reload and state change hint.<br/>Reported by: Krzysztof Trempala<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=e909f4a78c04f201bc633f45f8e270c24b611d13">[e909f4a78c]</a> Kevin Harwell -- pbx: Deadlock between contexts container and context_merge locks</li>
</ul><br><h4>Category: Applications/app_meetme</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25569">ASTERISK-25569</a>: app_meetme: Audio quality issues<br/>Reported by: Corey Farrell<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=fa7329b72d3e00d32252457b82544fc143e3d383">[fa7329b72d]</a> Corey Farrell -- app_meetme: Set default value for audio_buffers.</li>
</ul><br><h4>Category: Channels/chan_dahdi</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25494">ASTERISK-25494</a>: build: GCC 5.1.x catches some new const, array bounds and missing paren issues<br/>Reported by: George Joseph<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=992879aa431bca204375b53e5735f39a6ed539c7">[992879aa43]</a> gtjoseph -- build: GCC 5.1.x catches some new const, array bounds and missing paren issues</li>
</ul><br><h4>Category: Channels/chan_pjsip</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25455">ASTERISK-25455</a>: Deadlock of PJSIP realtime over res_config_pgsql <br/>Reported by: mdu113<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=9f4892ece40d493c5c187f668fe0877e26ae6b36">[9f4892ece4]</a> mdu113 -- res_config_pgsql.c: Fix deadlock loading realtime configuration.</li>
</ul><br><h4>Category: Channels/chan_sip/General</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25364">ASTERISK-25364</a>: [patch]Issue a TCP connection(kernel) and thread of asterisk is not released<br/>Reported by: Hiroaki Komatsu<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=e1d08a39c51d110e0aa7af2848b5d0a9947239e9">[e1d08a39c5]</a> Jonathan Rose -- chan_sip: Add TCP/TLS keepalive to TCP/TLS server</li>
</ul><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25610">ASTERISK-25610</a>: Asterisk crash during "sip reload"<br/>Reported by: Dudás József<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=47118fb9473af6f361792c83970cc35be573663b">[47118fb947]</a> Richard Mudgett -- chan_sip: Fix crash involving the bogus peer during sip reload.</li>
</ul><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25476">ASTERISK-25476</a>: chan_sip loses registrations after a while<br/>Reported by: Michael Keuter<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=bd4aee4b7bd10f793ae0bbd7db8fcdb9eff9c65c">[bd4aee4b7b]</a> Richard Mudgett -- sched.c: Make not return a sched id of 0.</li>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=394b8a40c1508ef5617dfa231886aacc163dad0e">[394b8a40c1]</a> Richard Mudgett -- Audit improper usage of scheduler exposed by 5c713fdf18f.</li>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=e74110188d7e4c959d6c3ddbe40635a639b33a14">[e74110188d]</a> Steve Davies -- Further fixes to improper usage of scheduler</li>
</ul><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25494">ASTERISK-25494</a>: build: GCC 5.1.x catches some new const, array bounds and missing paren issues<br/>Reported by: George Joseph<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=992879aa431bca204375b53e5735f39a6ed539c7">[992879aa43]</a> gtjoseph -- build: GCC 5.1.x catches some new const, array bounds and missing paren issues</li>
</ul><br><h4>Category: Channels/chan_sip/IPv6</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25443">ASTERISK-25443</a>: [patch]IPv6 - Potential issue in via header parsing<br/>Reported by: ffs<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=9354c1a64f567e552b3e0e376610a0503231275a">[9354c1a64f]</a> Florian Sauerteig -- chan_sip: Fix port parsing for IPv6 addresses in SIP Via headers.</li>
</ul><br><h4>Category: Channels/chan_sip/Interoperability</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25135">ASTERISK-25135</a>: [patch]RTP Timeout hangup cause code missing<br/>Reported by: Olle Johansson<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=b3101fb8df3bccfd8bd690aca2583d47e7d520f2">[b3101fb8df]</a> Olle Johansson -- channels/chan_sip: Set cause code to 44 on RTP timeout</li>
</ul><br><h4>Category: Channels/chan_sip/T.38</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25609">ASTERISK-25609</a>: [patch]Asterisk may crash when calling ast_channel_get_t38_state(c)<br/>Reported by: Filip Jenicek<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=62574fb9dcbecf3dcd3b83b619900656ea1bd3db">[62574fb9dc]</a> Filip Jenicek -- chan_sip: Check sip_pvt pointer in ast_channel_get_t38_state(c)</li>
</ul><br><h4>Category: Channels/chan_sip/WebSocket</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-24146">ASTERISK-24146</a>: [patch]No audio on WebRtc caller side when answer waiting time is more than ~7sec<br/>Reported by: Aleksei Kulakov<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=badac7c340248637740da7ff4421c9f22a7e399e">[badac7c340]</a> Eugene Voityuk -- chan_sip.c: Start ICE negotiation when response is sent or received.</li>
</ul><br><h4>Category: Channels/chan_skinny</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25494">ASTERISK-25494</a>: build: GCC 5.1.x catches some new const, array bounds and missing paren issues<br/>Reported by: George Joseph<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=992879aa431bca204375b53e5735f39a6ed539c7">[992879aa43]</a> gtjoseph -- build: GCC 5.1.x catches some new const, array bounds and missing paren issues</li>
</ul><br><h4>Category: Codecs/General</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25616">ASTERISK-25616</a>: Warning with a Codec Module which supports PLC with FEC<br/>Reported by: Alexander Traud<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=ac8e285dfd883b82d035b727c932efa2a782b72a">[ac8e285dfd]</a> Alexander Traud -- translate: Avoid a warning message when doing FEC within Opus Codec.</li>
</ul><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25498">ASTERISK-25498</a>: Asterisk crashes when negotiating g729 without that module installed<br/>Reported by: Ben Langfeld<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=0a8fe8de118e587e162234c21f700eb0306ff064">[0a8fe8de11]</a> Joshua Colp -- Fix crash in audiohook translate to slin</li>
</ul><br><h4>Category: Codecs/codec_resample</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25599">ASTERISK-25599</a>: [patch] SLIN Resampling Codec only 80 msec<br/>Reported by: Alexander Traud<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=a388ff29e72b2348333a5316de49289b78731b89">[a388ff29e7]</a> Alexander Traud -- codec_resample: Increase buffer for Opus Codec with FEC.</li>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=6f04531b41f7b4b09b469d9e5c6342a0215c295c">[6f04531b41]</a> Alexander Traud -- codec_resample: Increase buffer for Opus Codec.</li>
</ul><br><h4>Category: Core/AstDB</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25400">ASTERISK-25400</a>: Hints broken when "CustomPresence" doesn't exist in AstDB<br/>Reported by: Andrew Nagy<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=966265dd704ad5cf35591f84aa3eddd8d6bc52a5">[966265dd70]</a> Ivan Poddubny -- func_presencestate: Return "not_set" when no data is set in AstDB</li>
</ul><br><h4>Category: Core/BuildSystem</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25434">ASTERISK-25434</a>: Compiler flags not reported in 'core show settings' despite usage during compilation<br/>Reported by: Rusty Newton<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=77936f612d7418e7c8e9bd806633517a56b9cd38">[77936f612d]</a> Corey Farrell -- Fix cli display of build options.</li>
</ul><br><h4>Category: Core/General</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25585">ASTERISK-25585</a>: [patch]rasterisk never hits most of main(), but it's assumed to<br/>Reported by: Walter Doekes<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=4450cf89d877efe46b5ceeadc4d7a7b85a027dc2">[4450cf89d8]</a> Walter Doekes -- main: Slight refactor of main. Improve color situation.</li>
</ul><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25552">ASTERISK-25552</a>: hashtab: Improve NULL tolerance<br/>Reported by: Joshua Colp<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=78734aadf46795094955e6783d5e6f1223b7fa65">[78734aadf4]</a> Joshua Colp -- hashtab: Add NULL check when destroying iterator.</li>
</ul><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25449">ASTERISK-25449</a>: main/sched: Regression introduced by 5c713fdf18f causes erroneous duplicate RTCP messages; other potential scheduling issues in chan_sip/chan_skinny<br/>Reported by: Matt Jordan<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=e74110188d7e4c959d6c3ddbe40635a639b33a14">[e74110188d]</a> Steve Davies -- Further fixes to improper usage of scheduler</li>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=44efdbd2de7b8a2bc05840901dc9a1cfbbab3c4c">[44efdbd2de]</a> Matt Jordan -- res/res_rtp_asterisk: Fix assignment after ao2 decrement</li>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=60a9172d7ef2b295d953ce95adc66ab1daf8f4bc">[60a9172d7e]</a> Matt Jordan -- Fix improper usage of scheduler exposed by 5c713fdf18f</li>
</ul><a href="https://issues.asterisk.org/jira/browse/ASTERISK-7803">ASTERISK-7803</a>: [patch] Update the maximum packetization values in frame.c<br/>Reported by: dea<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=811ef5ebac74c61c47d3b3c3d2b654ff86731429">[811ef5ebac]</a> Alexander Traud -- format: Update the maximum packetization time for iLBC 30.</li>
</ul><br><h4>Category: Core/ManagerInterface</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25391">ASTERISK-25391</a>: AMI GetConfigJSON returns invalid JSON<br/>Reported by: Bojan Nemčić<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=b66f1eef4106771b9edf9a3efb98ac849c1b2fc0">[b66f1eef41]</a> Ivan Poddubny -- manager: Fix GetConfigJSON returning invalid JSON</li>
</ul><br><h4>Category: Core/PBX</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25394">ASTERISK-25394</a>: pbx: Incorrect device and presence state when changing hint details<br/>Reported by: Joshua Colp<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=e909f4a78c04f201bc633f45f8e270c24b611d13">[e909f4a78c]</a> Kevin Harwell -- pbx: Deadlock between contexts container and context_merge locks</li>
</ul><br><h4>Category: Documentation</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25373">ASTERISK-25373</a>: add documentation for CALLERID(pres) and also the CONNECTEDLINE and REDIRECTING variants<br/>Reported by: Walter Doekes<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=8fd2b60e1ab5e420ab9aadbf09092e1c9e7bd62f">[8fd2b60e1a]</a> Walter Doekes -- func_callerid: Document that CALLERID(pres) is available.</li>
</ul><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25527">ASTERISK-25527</a>: Quirky xmldoc description wrapping<br/>Reported by: Walter Doekes<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=ebed86fb4a0e09fcd7473e2e0d13a931adbfcd3e">[ebed86fb4a]</a> Walter Doekes -- xmldoc: Improve xmldoc wrapping of 'core show ...' output.</li>
</ul><br><h4>Category: Formats/General</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25537">ASTERISK-25537</a>: [patch] format-attribute module: RFC or internal defaults?<br/>Reported by: Alexander Traud<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=6373ed28525f92c47c7df757bdd476bd9bee1c66">[6373ed2852]</a> Alexander Traud -- rtp_engine: Init a format-attribute module to its RFC defaults.</li>
</ul><br><h4>Category: Functions/func_callerid</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25373">ASTERISK-25373</a>: add documentation for CALLERID(pres) and also the CONNECTEDLINE and REDIRECTING variants<br/>Reported by: Walter Doekes<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=8fd2b60e1ab5e420ab9aadbf09092e1c9e7bd62f">[8fd2b60e1a]</a> Walter Doekes -- func_callerid: Document that CALLERID(pres) is available.</li>
</ul><br><h4>Category: Resources/res_agi</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25593">ASTERISK-25593</a>: fastagi: record file closed after sending result<br/>Reported by: Kevin Harwell<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=92f631e2f4cc616a446ac9de31ba390008915c08">[92f631e2f4]</a> Kevin Harwell -- fastagi: record file closed after sending result</li>
</ul><br><h4>Category: Resources/res_config_pgsql</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25455">ASTERISK-25455</a>: Deadlock of PJSIP realtime over res_config_pgsql <br/>Reported by: mdu113<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=9f4892ece40d493c5c187f668fe0877e26ae6b36">[9f4892ece4]</a> mdu113 -- res_config_pgsql.c: Fix deadlock loading realtime configuration.</li>
</ul><br><h4>Category: Resources/res_pjsip</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25455">ASTERISK-25455</a>: Deadlock of PJSIP realtime over res_config_pgsql <br/>Reported by: mdu113<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=9f4892ece40d493c5c187f668fe0877e26ae6b36">[9f4892ece4]</a> mdu113 -- res_config_pgsql.c: Fix deadlock loading realtime configuration.</li>
</ul><br><h4>Category: Resources/res_rtp_asterisk</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-24146">ASTERISK-24146</a>: [patch]No audio on WebRtc caller side when answer waiting time is more than ~7sec<br/>Reported by: Aleksei Kulakov<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=badac7c340248637740da7ff4421c9f22a7e399e">[badac7c340]</a> Eugene Voityuk -- chan_sip.c: Start ICE negotiation when response is sent or received.</li>
</ul><a href="https://issues.asterisk.org/jira/browse/ASTERISK-25438">ASTERISK-25438</a>: res_rtp_asterisk: ICE role message even when ICE is not enabled<br/>Reported by: Joshua Colp<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=fa0985851aba9bc8ca234b66cd47c50e45eae61f">[fa0985851a]</a> Joshua Colp -- res_rtp_asterisk: Move "Set role" warning to be debug.</li>
</ul><br><h3>Improvement</h3><h4>Category: Core/BuildSystem</h4><a href="https://issues.asterisk.org/jira/browse/ASTERISK-24718">ASTERISK-24718</a>: [patch]Add inital support of "sanitize" to configure<br/>Reported by: Badalian Vyacheslav<ul>
<li><a href="https://code.asterisk.org/code/changelog/asterisk?cs=a0bb7b50ae25fb2c6c222392214e761c0c5b1ec4">[a0bb7b50ae]</a> Ivan Poddubny -- Build: Add menuselect options for using compiler sanitizers</li>
</ul><br><hr><a name="commits"><h2 align="center">Commits Not Associated with an Issue</h2></a><center><a href="#top">[Back to Top]</a></center><p>This is a list of all changes that went into this release that did not reference a JIRA issue.</p><table width="100%" border="1">
<tr><th>Revision</th><th>Author</th><th>Summary</th></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=8720b171cee19cd5179232764d5066e26382fe81">8720b171ce</a></td><td>Kevin Harwell</td><td>Release summaries: Remove previous versions</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=731f22c9e89a0d27de0bb9d78ac06b9b248c6df9">731f22c9e8</a></td><td>Kevin Harwell</td><td>.version: Update for 11.21.0</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=2d8ed745d8f3a5161064a070498213b34242dac5">2d8ed745d8</a></td><td>Kevin Harwell</td><td>.lastclean: Update for 11.21.0</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=b4eef8b8d477047991524c661b73a54efe8fa8ec">b4eef8b8d4</a></td><td>Kevin Harwell</td><td>ChangeLog: Updated for 11.21.0-rc3</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=c09fbe124888e65977e39cccab16fddcfbb19818">c09fbe1248</a></td><td>Kevin Harwell</td><td>Release summaries: Add summaries for 11.21.0-rc3</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=a2a4b9386470c01f582e24cf3ee0d9d30fd3c30b">a2a4b93864</a></td><td>Kevin Harwell</td><td>Release summaries: Remove previous versions</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=0f399a5a5fd79bade2b08973011203958102dba0">0f399a5a5f</a></td><td>Kevin Harwell</td><td>.version: Update for 11.21.0-rc3</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=1d6ac3f797c9972e360a58e14dbadca86476aa57">1d6ac3f797</a></td><td>Kevin Harwell</td><td>.lastclean: Update for 11.21.0-rc3</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=a2b5d4fa545dcd95535b713f5d9b906fa13c28d5">a2b5d4fa54</a></td><td>Kevin Harwell</td><td>ChangeLog: Updated for 11.21.0-rc2</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=45f8ba7cb33f310527d18898fe5cb21685954b49">45f8ba7cb3</a></td><td>Kevin Harwell</td><td>Release summaries: Add summaries for 11.21.0-rc2</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=aaff9871f3f383ee6cafcbc1da5632737a7d85ef">aaff9871f3</a></td><td>Kevin Harwell</td><td>Release summaries: Remove previous versions</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=175c1afbb59a013f582ffea9cfd6b26fd0b249e5">175c1afbb5</a></td><td>Kevin Harwell</td><td>.version: Update for 11.21.0-rc2</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=3183add62b463848f8fc222aa78af469f8f9136f">3183add62b</a></td><td>Kevin Harwell</td><td>.lastclean: Update for 11.21.0-rc2</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=a07795c6975b9d35ab9e1ac931748765acd2e9c3">a07795c697</a></td><td>Kevin Harwell</td><td>ChangeLog: Updated for 11.21.0-rc1</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=2108015d2f3e325d69fa04b15257d5c3fc87a8e5">2108015d2f</a></td><td>Kevin Harwell</td><td>Release summaries: Add summaries for 11.21.0-rc1</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=a2e60af7ff88ec20cc6d6fcd045ed8dc7b351f30">a2e60af7ff</a></td><td>Kevin Harwell</td><td>.version: Update for 11.21.0-rc1</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=58966343b3a885bc47990471790a8623a7f815fa">58966343b3</a></td><td>Kevin Harwell</td><td>.lastclean: Update for 11.21.0-rc1</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=d4e349129345d35c33dc3312f6b58497dde39a28">d4e3491293</a></td><td>Matt Jordan</td><td>main/utils: Don't emit an ERROR message if the read end of a pipe closes</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=b59b0bb509f1a7af741f69b238e849d7741f8bca">b59b0bb509</a></td><td>Joshua Colp</td><td>build: Fix building with newer GCC.</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=33e214e025b6314278679188f43c733125091b57">33e214e025</a></td><td>Walter Doekes</td><td>docs: Fix a few typo's in app docs (more then, resourse).</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=a702ef503fa6defdf083370cf344e47fcf55e91f">a702ef503f</a></td><td>Richard Mudgett</td><td>config.c: Fix off-nominal memory leak.</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=164e2860375a869f9a666977379cf63e4ca94391">164e286037</a></td><td>Richard Mudgett</td><td>config.c: Fix potential memory corruption after [section](+).</td></tr>
<tr><td><a href="https://code.asterisk.org/code/changelog/asterisk?cs=6803444ac14bcd7f70bb028e9e319785a5335a79">6803444ac1</a></td><td>Richard Mudgett</td><td>sched.c: Add warning about negative time interval request.</td></tr>
</table><hr><a name="diffstat"><h2 align="center">Diffstat Results</h2></a><center><a href="#top">[Back to Top]</a></center><p>This is a summary of the changes to the source code that went into this release that was generated using the diffstat utility.</p><pre>asterisk-11.20.0-summary.html | 126 -------
asterisk-11.20.0-summary.txt | 399 ------------------------
b/.version | 2
b/CHANGES | 16
b/ChangeLog | 629 ++++++++++++++++++++++++++++++++-------
b/Makefile | 2
b/Makefile.rules | 20 +
b/apps/app_chanisavail.c | 6
b/apps/app_dial.c | 10
b/apps/app_meetme.c | 3
b/apps/app_page.c | 2
b/build_tools/cflags.xml | 26 +
b/build_tools/make_version_c | 25 +
b/channels/chan_dahdi.c | 5
b/channels/chan_iax2.c | 21 -
b/channels/chan_sip.c | 94 ++++-
b/channels/chan_skinny.c | 10
b/channels/sig_pri.c | 2
b/channels/sip/config_parser.c | 9
b/channels/sip/reqresp_parser.c | 2
b/codecs/codec_resample.c | 8
b/funcs/func_callerid.c | 39 +-
b/funcs/func_presencestate.c | 4
b/include/asterisk/ast_version.h | 3
b/include/asterisk/event_defs.h | 14
b/include/asterisk/term.h | 2
b/main/asterisk.c | 126 ++++---
b/main/audiohook.c | 12
b/main/channel.c | 1
b/main/config.c | 41 +-
b/main/features.c | 4
b/main/format.c | 2
b/main/hashtab.c | 2
b/main/manager.c | 4
b/main/pbx.c | 532 +++++++++++++++-----------------
b/main/rtp_engine.c | 2
b/main/sched.c | 22 +
b/main/term.c | 21 -
b/main/translate.c | 10
b/main/utils.c | 8
b/main/xmldoc.c | 150 +--------
b/pbx/pbx_dundi.c | 1
b/res/res_agi.c | 6
b/res/res_config_pgsql.c | 8
b/res/res_rtp_asterisk.c | 34 +-
45 files changed, 1242 insertions(+), 1223 deletions(-)</pre><br></html>

View File

@@ -0,0 +1,458 @@
Release Summary
asterisk-11.21.0
Date: 2016-01-15
<asteriskteam@digium.com>
----------------------------------------------------------------------
Table of Contents
1. Summary
2. Contributors
3. Closed Issues
4. Other Changes
5. Diffstat
----------------------------------------------------------------------
Summary
[Back to Top]
This release is a point release of an existing major version. The changes
included were made to address problems that have been identified in this
release series, or are minor, backwards compatible new features or
improvements. Users should be able to safely upgrade to this version if
this release series is already in use. Users considering upgrading from a
previous version are strongly encouraged to review the UPGRADE.txt
document as well as the CHANGES document for information about upgrading
to this release series.
The data in this summary reflects changes that have been made since the
previous release, asterisk-11.20.0.
----------------------------------------------------------------------
Contributors
[Back to Top]
This table lists the people who have submitted code, those that have
tested patches, as well as those that reported issues on the issue tracker
that were resolved in this release. For coders, the number is how many of
their patches (of any size) were committed into this release. For testers,
the number is the number of times their name was listed as assisting with
testing a patch. Finally, for reporters, the number is the number of
issues that they reported that were affected by commits that went into
this release.
Coders Testers Reporters
14 Kevin Harwell 1 gtjoseph 4 Alexander Traud
7 Richard Mudgett 1 starting asterisk -c 3 Walter Doekes
5 Kevin Harwell until the colors stopped 3 Joshua Colp
5 Alexander Traud 3 Michael Keuter
4 Walter Doekes 3 Matt Jordan
4 Joshua Colp 1 Rusty Newton
3 Matt Jordan 1 ffs
3 Ivan Poddubny 1 Andrew Nagy
2 Corey Farrell 1 Ben Langfeld
1 Filip Jenicek 1 Kevin Harwell
1 Eugene Voityuk 1 Krzysztof Trempala
1 Steve Davies 1 George Joseph
1 Olle Johansson (License 1 mdu113
5267) 1 DudA!s JA^3zsef
1 Florian Sauerteig 1 Hiroaki Komatsu
1 Jonathan Rose 1 Ben Langfeld
1 gtjoseph 1 Rusty Newton
1 server-pandora 1 Corey Farrell
1 mdu113 1 Bojan NemA:*iA:*
1 Krzysztof Trempala
1 Badalian Vyacheslav
1 Olle Johansson
1 Sean Pimental
1 Aleksei Kulakov
1 gtjoseph
1 Badalian Vyacheslav
1 Olle Johansson
1 Andrew Nagy
1 Filip Jenicek
1 Dade Brandon
1 Bojan NemA:*iA:*
1 Richard Mudgett
1 dea
----------------------------------------------------------------------
Closed Issues
[Back to Top]
This is a list of all issues from the issue tracker that were closed by
changes that went into this release.
Bug
Category: Addons/General
ASTERISK-25640: pbx: Deadlock on features reload and state change hint.
Reported by: Krzysztof Trempala
* [e909f4a78c] Kevin Harwell -- pbx: Deadlock between contexts container
and context_merge locks
Category: Applications/app_meetme
ASTERISK-25569: app_meetme: Audio quality issues
Reported by: Corey Farrell
* [fa7329b72d] Corey Farrell -- app_meetme: Set default value for
audio_buffers.
Category: Channels/chan_dahdi
ASTERISK-25494: build: GCC 5.1.x catches some new const, array bounds and
missing paren issues
Reported by: George Joseph
* [992879aa43] gtjoseph -- build: GCC 5.1.x catches some new const,
array bounds and missing paren issues
Category: Channels/chan_pjsip
ASTERISK-25455: Deadlock of PJSIP realtime over res_config_pgsql
Reported by: mdu113
* [9f4892ece4] mdu113 -- res_config_pgsql.c: Fix deadlock loading
realtime configuration.
Category: Channels/chan_sip/General
ASTERISK-25364: [patch]Issue a TCP connection(kernel) and thread of
asterisk is not released
Reported by: Hiroaki Komatsu
* [e1d08a39c5] Jonathan Rose -- chan_sip: Add TCP/TLS keepalive to
TCP/TLS server
ASTERISK-25610: Asterisk crash during "sip reload"
Reported by: DudA!s JA^3zsef
* [47118fb947] Richard Mudgett -- chan_sip: Fix crash involving the
bogus peer during sip reload.
ASTERISK-25476: chan_sip loses registrations after a while
Reported by: Michael Keuter
* [bd4aee4b7b] Richard Mudgett -- sched.c: Make not return a sched id of
0.
* [394b8a40c1] Richard Mudgett -- Audit improper usage of scheduler
exposed by 5c713fdf18f.
* [e74110188d] Steve Davies -- Further fixes to improper usage of
scheduler
ASTERISK-25494: build: GCC 5.1.x catches some new const, array bounds and
missing paren issues
Reported by: George Joseph
* [992879aa43] gtjoseph -- build: GCC 5.1.x catches some new const,
array bounds and missing paren issues
Category: Channels/chan_sip/IPv6
ASTERISK-25443: [patch]IPv6 - Potential issue in via header parsing
Reported by: ffs
* [9354c1a64f] Florian Sauerteig -- chan_sip: Fix port parsing for IPv6
addresses in SIP Via headers.
Category: Channels/chan_sip/Interoperability
ASTERISK-25135: [patch]RTP Timeout hangup cause code missing
Reported by: Olle Johansson
* [b3101fb8df] Olle Johansson -- channels/chan_sip: Set cause code to 44
on RTP timeout
Category: Channels/chan_sip/T.38
ASTERISK-25609: [patch]Asterisk may crash when calling
ast_channel_get_t38_state(c)
Reported by: Filip Jenicek
* [62574fb9dc] Filip Jenicek -- chan_sip: Check sip_pvt pointer in
ast_channel_get_t38_state(c)
Category: Channels/chan_sip/WebSocket
ASTERISK-24146: [patch]No audio on WebRtc caller side when answer waiting
time is more than ~7sec
Reported by: Aleksei Kulakov
* [badac7c340] Eugene Voityuk -- chan_sip.c: Start ICE negotiation when
response is sent or received.
Category: Channels/chan_skinny
ASTERISK-25494: build: GCC 5.1.x catches some new const, array bounds and
missing paren issues
Reported by: George Joseph
* [992879aa43] gtjoseph -- build: GCC 5.1.x catches some new const,
array bounds and missing paren issues
Category: Codecs/General
ASTERISK-25616: Warning with a Codec Module which supports PLC with FEC
Reported by: Alexander Traud
* [ac8e285dfd] Alexander Traud -- translate: Avoid a warning message
when doing FEC within Opus Codec.
ASTERISK-25498: Asterisk crashes when negotiating g729 without that module
installed
Reported by: Ben Langfeld
* [0a8fe8de11] Joshua Colp -- Fix crash in audiohook translate to slin
Category: Codecs/codec_resample
ASTERISK-25599: [patch] SLIN Resampling Codec only 80 msec
Reported by: Alexander Traud
* [a388ff29e7] Alexander Traud -- codec_resample: Increase buffer for
Opus Codec with FEC.
* [6f04531b41] Alexander Traud -- codec_resample: Increase buffer for
Opus Codec.
Category: Core/AstDB
ASTERISK-25400: Hints broken when "CustomPresence" doesn't exist in AstDB
Reported by: Andrew Nagy
* [966265dd70] Ivan Poddubny -- func_presencestate: Return "not_set"
when no data is set in AstDB
Category: Core/BuildSystem
ASTERISK-25434: Compiler flags not reported in 'core show settings'
despite usage during compilation
Reported by: Rusty Newton
* [77936f612d] Corey Farrell -- Fix cli display of build options.
Category: Core/General
ASTERISK-25585: [patch]rasterisk never hits most of main(), but it's
assumed to
Reported by: Walter Doekes
* [4450cf89d8] Walter Doekes -- main: Slight refactor of main. Improve
color situation.
ASTERISK-25552: hashtab: Improve NULL tolerance
Reported by: Joshua Colp
* [78734aadf4] Joshua Colp -- hashtab: Add NULL check when destroying
iterator.
ASTERISK-25449: main/sched: Regression introduced by 5c713fdf18f causes
erroneous duplicate RTCP messages; other potential scheduling issues in
chan_sip/chan_skinny
Reported by: Matt Jordan
* [e74110188d] Steve Davies -- Further fixes to improper usage of
scheduler
* [44efdbd2de] Matt Jordan -- res/res_rtp_asterisk: Fix assignment after
ao2 decrement
* [60a9172d7e] Matt Jordan -- Fix improper usage of scheduler exposed by
5c713fdf18f
ASTERISK-7803: [patch] Update the maximum packetization values in frame.c
Reported by: dea
* [811ef5ebac] Alexander Traud -- format: Update the maximum
packetization time for iLBC 30.
Category: Core/ManagerInterface
ASTERISK-25391: AMI GetConfigJSON returns invalid JSON
Reported by: Bojan NemA:*iA:*
* [b66f1eef41] Ivan Poddubny -- manager: Fix GetConfigJSON returning
invalid JSON
Category: Core/PBX
ASTERISK-25394: pbx: Incorrect device and presence state when changing
hint details
Reported by: Joshua Colp
* [e909f4a78c] Kevin Harwell -- pbx: Deadlock between contexts container
and context_merge locks
Category: Documentation
ASTERISK-25373: add documentation for CALLERID(pres) and also the
CONNECTEDLINE and REDIRECTING variants
Reported by: Walter Doekes
* [8fd2b60e1a] Walter Doekes -- func_callerid: Document that
CALLERID(pres) is available.
ASTERISK-25527: Quirky xmldoc description wrapping
Reported by: Walter Doekes
* [ebed86fb4a] Walter Doekes -- xmldoc: Improve xmldoc wrapping of 'core
show ...' output.
Category: Formats/General
ASTERISK-25537: [patch] format-attribute module: RFC or internal defaults?
Reported by: Alexander Traud
* [6373ed2852] Alexander Traud -- rtp_engine: Init a format-attribute
module to its RFC defaults.
Category: Functions/func_callerid
ASTERISK-25373: add documentation for CALLERID(pres) and also the
CONNECTEDLINE and REDIRECTING variants
Reported by: Walter Doekes
* [8fd2b60e1a] Walter Doekes -- func_callerid: Document that
CALLERID(pres) is available.
Category: Resources/res_agi
ASTERISK-25593: fastagi: record file closed after sending result
Reported by: Kevin Harwell
* [92f631e2f4] Kevin Harwell -- fastagi: record file closed after
sending result
Category: Resources/res_config_pgsql
ASTERISK-25455: Deadlock of PJSIP realtime over res_config_pgsql
Reported by: mdu113
* [9f4892ece4] mdu113 -- res_config_pgsql.c: Fix deadlock loading
realtime configuration.
Category: Resources/res_pjsip
ASTERISK-25455: Deadlock of PJSIP realtime over res_config_pgsql
Reported by: mdu113
* [9f4892ece4] mdu113 -- res_config_pgsql.c: Fix deadlock loading
realtime configuration.
Category: Resources/res_rtp_asterisk
ASTERISK-24146: [patch]No audio on WebRtc caller side when answer waiting
time is more than ~7sec
Reported by: Aleksei Kulakov
* [badac7c340] Eugene Voityuk -- chan_sip.c: Start ICE negotiation when
response is sent or received.
ASTERISK-25438: res_rtp_asterisk: ICE role message even when ICE is not
enabled
Reported by: Joshua Colp
* [fa0985851a] Joshua Colp -- res_rtp_asterisk: Move "Set role" warning
to be debug.
Improvement
Category: Core/BuildSystem
ASTERISK-24718: [patch]Add inital support of "sanitize" to configure
Reported by: Badalian Vyacheslav
* [a0bb7b50ae] Ivan Poddubny -- Build: Add menuselect options for using
compiler sanitizers
----------------------------------------------------------------------
Commits Not Associated with an Issue
[Back to Top]
This is a list of all changes that went into this release that did not
reference a JIRA issue.
+------------------------------------------------------------------------+
| Revision | Author | Summary |
|------------+-----------------+-----------------------------------------|
| 8720b171ce | Kevin Harwell | Release summaries: Remove previous |
| | | versions |
|------------+-----------------+-----------------------------------------|
| 731f22c9e8 | Kevin Harwell | .version: Update for 11.21.0 |
|------------+-----------------+-----------------------------------------|
| 2d8ed745d8 | Kevin Harwell | .lastclean: Update for 11.21.0 |
|------------+-----------------+-----------------------------------------|
| b4eef8b8d4 | Kevin Harwell | ChangeLog: Updated for 11.21.0-rc3 |
|------------+-----------------+-----------------------------------------|
| c09fbe1248 | Kevin Harwell | Release summaries: Add summaries for |
| | | 11.21.0-rc3 |
|------------+-----------------+-----------------------------------------|
| a2a4b93864 | Kevin Harwell | Release summaries: Remove previous |
| | | versions |
|------------+-----------------+-----------------------------------------|
| 0f399a5a5f | Kevin Harwell | .version: Update for 11.21.0-rc3 |
|------------+-----------------+-----------------------------------------|
| 1d6ac3f797 | Kevin Harwell | .lastclean: Update for 11.21.0-rc3 |
|------------+-----------------+-----------------------------------------|
| a2b5d4fa54 | Kevin Harwell | ChangeLog: Updated for 11.21.0-rc2 |
|------------+-----------------+-----------------------------------------|
| 45f8ba7cb3 | Kevin Harwell | Release summaries: Add summaries for |
| | | 11.21.0-rc2 |
|------------+-----------------+-----------------------------------------|
| aaff9871f3 | Kevin Harwell | Release summaries: Remove previous |
| | | versions |
|------------+-----------------+-----------------------------------------|
| 175c1afbb5 | Kevin Harwell | .version: Update for 11.21.0-rc2 |
|------------+-----------------+-----------------------------------------|
| 3183add62b | Kevin Harwell | .lastclean: Update for 11.21.0-rc2 |
|------------+-----------------+-----------------------------------------|
| a07795c697 | Kevin Harwell | ChangeLog: Updated for 11.21.0-rc1 |
|------------+-----------------+-----------------------------------------|
| 2108015d2f | Kevin Harwell | Release summaries: Add summaries for |
| | | 11.21.0-rc1 |
|------------+-----------------+-----------------------------------------|
| a2e60af7ff | Kevin Harwell | .version: Update for 11.21.0-rc1 |
|------------+-----------------+-----------------------------------------|
| 58966343b3 | Kevin Harwell | .lastclean: Update for 11.21.0-rc1 |
|------------+-----------------+-----------------------------------------|
| d4e3491293 | Matt Jordan | main/utils: Don't emit an ERROR message |
| | | if the read end of a pipe closes |
|------------+-----------------+-----------------------------------------|
| b59b0bb509 | Joshua Colp | build: Fix building with newer GCC. |
|------------+-----------------+-----------------------------------------|
| 33e214e025 | Walter Doekes | docs: Fix a few typo's in app docs |
| | | (more then, resourse). |
|------------+-----------------+-----------------------------------------|
| a702ef503f | Richard Mudgett | config.c: Fix off-nominal memory leak. |
|------------+-----------------+-----------------------------------------|
| 164e286037 | Richard Mudgett | config.c: Fix potential memory |
| | | corruption after [section](+). |
|------------+-----------------+-----------------------------------------|
| 6803444ac1 | Richard Mudgett | sched.c: Add warning about negative |
| | | time interval request. |
+------------------------------------------------------------------------+
----------------------------------------------------------------------
Diffstat Results
[Back to Top]
This is a summary of the changes to the source code that went into this
release that was generated using the diffstat utility.
asterisk-11.20.0-summary.html | 126 -------
asterisk-11.20.0-summary.txt | 399 ------------------------
b/.version | 2
b/CHANGES | 16
b/ChangeLog | 629 ++++++++++++++++++++++++++++++++-------
b/Makefile | 2
b/Makefile.rules | 20 +
b/apps/app_chanisavail.c | 6
b/apps/app_dial.c | 10
b/apps/app_meetme.c | 3
b/apps/app_page.c | 2
b/build_tools/cflags.xml | 26 +
b/build_tools/make_version_c | 25 +
b/channels/chan_dahdi.c | 5
b/channels/chan_iax2.c | 21 -
b/channels/chan_sip.c | 94 ++++-
b/channels/chan_skinny.c | 10
b/channels/sig_pri.c | 2
b/channels/sip/config_parser.c | 9
b/channels/sip/reqresp_parser.c | 2
b/codecs/codec_resample.c | 8
b/funcs/func_callerid.c | 39 +-
b/funcs/func_presencestate.c | 4
b/include/asterisk/ast_version.h | 3
b/include/asterisk/event_defs.h | 14
b/include/asterisk/term.h | 2
b/main/asterisk.c | 126 ++++---
b/main/audiohook.c | 12
b/main/channel.c | 1
b/main/config.c | 41 +-
b/main/features.c | 4
b/main/format.c | 2
b/main/hashtab.c | 2
b/main/manager.c | 4
b/main/pbx.c | 532 +++++++++++++++-----------------
b/main/rtp_engine.c | 2
b/main/sched.c | 22 +
b/main/term.c | 21 -
b/main/translate.c | 10
b/main/utils.c | 8
b/main/xmldoc.c | 150 +--------
b/pbx/pbx_dundi.c | 1
b/res/res_agi.c | 6
b/res/res_config_pgsql.c | 8
b/res/res_rtp_asterisk.c | 34 +-
45 files changed, 1242 insertions(+), 1223 deletions(-)

View File

@@ -60,8 +60,10 @@ enum ast_event_type {
AST_EVENT_ACL_CHANGE = 0x0b,
/*! Send out a ping for debugging distributed events */
AST_EVENT_PING = 0x0c,
/*! Used to alert listeners when a hint has changed. */
AST_EVENT_HINT_CHANGE = 0x0d,
/*! Number of event types. This should be the last event type + 1 */
AST_EVENT_TOTAL = 0x0d,
AST_EVENT_TOTAL = 0x0e,
};
/*! \brief Event Information Element types */
@@ -304,8 +306,16 @@ enum ast_event_ie_type {
* Payload type: UINT
*/
AST_EVENT_IE_CACHABLE = 0x003d,
/*!
* \brief Event hint change payload
* Used by: AST_EVENT_HINT_CHANGE
* Payload type: RAW
*/
AST_EVENT_IE_HINT_CHANGE_PAYLOAD = 0x003e,
/*! \brief Must be the last IE value +1 */
AST_EVENT_IE_TOTAL = 0x003e,
AST_EVENT_IE_TOTAL = 0x003f,
};
/*!

View File

@@ -1377,6 +1377,8 @@ static char *overrideswitch = NULL;
static struct ast_event_sub *device_state_sub;
/*! \brief Subscription for presence state change events */
static struct ast_event_sub *presence_state_sub;
/*! \brief Subscription for hint change events */
static struct ast_event_sub *hint_change_sub;
AST_MUTEX_DEFINE_STATIC(maxcalllock);
static int countcalls;
@@ -5300,15 +5302,113 @@ static int execute_state_callback(ast_state_cb_type cb,
return res;
}
static int handle_presencechange(void *datap)
static void presence_state_notify_callbacks(enum ast_event_type type, struct ast_hint *hint,
struct ast_str **hint_app, struct presencechange *pc)
{
struct ast_hint *hint;
struct ast_str *hint_app = NULL;
struct presencechange *pc = datap;
struct ao2_iterator i;
struct ao2_iterator cb_iter;
struct ast_state_cb *state_cb;
char context_name[AST_MAX_CONTEXT];
char exten_name[AST_MAX_EXTENSION];
ao2_lock(hint);
if (!hint->exten) {
/* The extension has already been destroyed */
ao2_unlock(hint);
return;
}
if (type != AST_EVENT_HINT_CHANGE) {
const char *app;
char *parse;
/* Does this hint monitor the device that changed state? */
app = ast_get_extension_app(hint->exten);
if (ast_strlen_zero(app)) {
/* The hint does not monitor presence at all. */
ao2_unlock(hint);
return;
}
ast_str_set(hint_app, 0, "%s", app);
parse = parse_hint_presence(*hint_app);
if (ast_strlen_zero(parse)) {
ao2_unlock(hint);
return;
}
if (strcasecmp(parse, pc->provider)) {
/* The hint does not monitor the presence provider. */
ao2_unlock(hint);
return;
}
}
/*
* Save off strings in case the hint extension gets destroyed
* while we are notifying the watchers.
*/
ast_copy_string(context_name,
ast_get_context_name(ast_get_extension_context(hint->exten)),
sizeof(context_name));
ast_copy_string(exten_name, ast_get_extension_name(hint->exten),
sizeof(exten_name));
ast_str_set(hint_app, 0, "%s", ast_get_extension_app(hint->exten));
/* Check to see if update is necessary */
if ((hint->last_presence_state == pc->state) &&
((hint->last_presence_subtype && pc->subtype &&
!strcmp(hint->last_presence_subtype, pc->subtype)) ||
(!hint->last_presence_subtype && !pc->subtype)) &&
((hint->last_presence_message && pc->message &&
!strcmp(hint->last_presence_message, pc->message)) ||
(!hint->last_presence_message && !pc->message))) {
/* this update is the same as the last, do nothing */
ao2_unlock(hint);
return;
}
/* update new values */
ast_free(hint->last_presence_subtype);
ast_free(hint->last_presence_message);
hint->last_presence_state = pc->state;
hint->last_presence_subtype = pc->subtype ? ast_strdup(pc->subtype) : NULL;
hint->last_presence_message = pc->message ? ast_strdup(pc->message) : NULL;
ao2_unlock(hint);
/* For general callbacks */
cb_iter = ao2_iterator_init(statecbs, 0);
for (; (state_cb = ao2_iterator_next(&cb_iter)); ao2_ref(state_cb, -1)) {
execute_state_callback(state_cb->change_cb,
context_name,
exten_name,
state_cb->data,
AST_HINT_UPDATE_PRESENCE,
hint,
NULL);
}
ao2_iterator_destroy(&cb_iter);
/* For extension callbacks */
cb_iter = ao2_iterator_init(hint->callbacks, 0);
for (; (state_cb = ao2_iterator_next(&cb_iter)); ao2_ref(state_cb, -1)) {
execute_state_callback(state_cb->change_cb,
context_name,
exten_name,
state_cb->data,
AST_HINT_UPDATE_PRESENCE,
hint,
NULL);
}
ao2_iterator_destroy(&cb_iter);
}
static int handle_presencechange(void *datap)
{
struct presencechange *pc = datap;
struct ast_hint *hint;
struct ast_str *hint_app = NULL;
struct ao2_iterator i;
int res = -1;
hint_app = ast_str_create(1024);
@@ -5319,93 +5419,8 @@ static int handle_presencechange(void *datap)
ast_mutex_lock(&context_merge_lock);/* Hold off ast_merge_contexts_and_delete */
i = ao2_iterator_init(hints, 0);
for (; (hint = ao2_iterator_next(&i)); ao2_ref(hint, -1)) {
struct ast_state_cb *state_cb;
const char *app;
char *parse;
ao2_lock(hint);
if (!hint->exten) {
/* The extension has already been destroyed */
ao2_unlock(hint);
continue;
}
/* Does this hint monitor the device that changed state? */
app = ast_get_extension_app(hint->exten);
if (ast_strlen_zero(app)) {
/* The hint does not monitor presence at all. */
ao2_unlock(hint);
continue;
}
ast_str_set(&hint_app, 0, "%s", app);
parse = parse_hint_presence(hint_app);
if (ast_strlen_zero(parse)) {
ao2_unlock(hint);
continue;
}
if (strcasecmp(parse, pc->provider)) {
/* The hint does not monitor the presence provider. */
ao2_unlock(hint);
continue;
}
/*
* Save off strings in case the hint extension gets destroyed
* while we are notifying the watchers.
*/
ast_copy_string(context_name,
ast_get_context_name(ast_get_extension_context(hint->exten)),
sizeof(context_name));
ast_copy_string(exten_name, ast_get_extension_name(hint->exten),
sizeof(exten_name));
ast_str_set(&hint_app, 0, "%s", ast_get_extension_app(hint->exten));
/* Check to see if update is necessary */
if ((hint->last_presence_state == pc->state) &&
((hint->last_presence_subtype && pc->subtype && !strcmp(hint->last_presence_subtype, pc->subtype)) || (!hint->last_presence_subtype && !pc->subtype)) &&
((hint->last_presence_message && pc->message && !strcmp(hint->last_presence_message, pc->message)) || (!hint->last_presence_message && !pc->message))) {
/* this update is the same as the last, do nothing */
ao2_unlock(hint);
continue;
}
/* update new values */
ast_free(hint->last_presence_subtype);
ast_free(hint->last_presence_message);
hint->last_presence_state = pc->state;
hint->last_presence_subtype = pc->subtype ? ast_strdup(pc->subtype) : NULL;
hint->last_presence_message = pc->message ? ast_strdup(pc->message) : NULL;
ao2_unlock(hint);
/* For general callbacks */
cb_iter = ao2_iterator_init(statecbs, 0);
for (; (state_cb = ao2_iterator_next(&cb_iter)); ao2_ref(state_cb, -1)) {
execute_state_callback(state_cb->change_cb,
context_name,
exten_name,
state_cb->data,
AST_HINT_UPDATE_PRESENCE,
hint,
NULL);
}
ao2_iterator_destroy(&cb_iter);
/* For extension callbacks */
cb_iter = ao2_iterator_init(hint->callbacks, 0);
for (; (state_cb = ao2_iterator_next(&cb_iter)); ao2_ref(state_cb, -1)) {
execute_state_callback(state_cb->change_cb,
context_name,
exten_name,
state_cb->data,
AST_HINT_UPDATE_PRESENCE,
hint,
NULL);
}
ao2_iterator_destroy(&cb_iter);
presence_state_notify_callbacks(
AST_EVENT_PRESENCE_STATE, hint, &hint_app, pc);
}
ao2_iterator_destroy(&i);
ast_mutex_unlock(&context_merge_lock);
@@ -5500,17 +5515,102 @@ static void get_device_state_causing_channels(struct ao2_container *c)
ao2_iterator_destroy(&iter);
}
static void device_state_notify_callbacks(struct ast_hint *hint, struct ast_str **hint_app)
{
struct ao2_iterator cb_iter;
struct ast_state_cb *state_cb;
int state, same_state;
struct ao2_container *device_state_info;
int first_extended_cb_call = 1;
char context_name[AST_MAX_CONTEXT];
char exten_name[AST_MAX_EXTENSION];
ao2_lock(hint);
if (!hint->exten) {
/* The extension has already been destroyed */
ao2_unlock(hint);
return;
}
/*
* Save off strings in case the hint extension gets destroyed
* while we are notifying the watchers.
*/
ast_copy_string(context_name,
ast_get_context_name(ast_get_extension_context(hint->exten)),
sizeof(context_name));
ast_copy_string(exten_name, ast_get_extension_name(hint->exten),
sizeof(exten_name));
ast_str_set(hint_app, 0, "%s", ast_get_extension_app(hint->exten));
ao2_unlock(hint);
/*
* Get device state for this hint.
*
* NOTE: We cannot hold any locks while determining the hint
* device state or notifying the watchers without causing a
* deadlock. (conlock, hints, and hint)
*/
/* Make a container so state3 can fill it if we wish.
* If that failed we simply do not provide the extended state info.
*/
device_state_info = alloc_device_state_info();
state = ast_extension_state3(*hint_app, device_state_info);
if ((same_state = state == hint->laststate) && (~state & AST_EXTENSION_RINGING)) {
ao2_cleanup(device_state_info);
return;
}
/* Device state changed since last check - notify the watchers. */
hint->laststate = state; /* record we saw the change */
/* For general callbacks */
cb_iter = ao2_iterator_init(statecbs, 0);
for (; !same_state && (state_cb = ao2_iterator_next(&cb_iter)); ao2_ref(state_cb, -1)) {
execute_state_callback(state_cb->change_cb,
context_name,
exten_name,
state_cb->data,
AST_HINT_UPDATE_DEVICE,
hint,
NULL);
}
ao2_iterator_destroy(&cb_iter);
/* For extension callbacks */
/* extended callbacks are called when the state changed or when AST_EVENT_RINGING is
* included. Normal callbacks are only called when the state changed.
*/
cb_iter = ao2_iterator_init(hint->callbacks, 0);
for (; (state_cb = ao2_iterator_next(&cb_iter)); ao2_ref(state_cb, -1)) {
if (state_cb->extended && first_extended_cb_call) {
/* Fill detailed device_state_info now that we know it is used by extd. callback */
first_extended_cb_call = 0;
get_device_state_causing_channels(device_state_info);
}
if (state_cb->extended || !same_state) {
execute_state_callback(state_cb->change_cb,
context_name,
exten_name,
state_cb->data,
AST_HINT_UPDATE_DEVICE,
hint,
state_cb->extended ? device_state_info : NULL);
}
}
ao2_iterator_destroy(&cb_iter);
ao2_cleanup(device_state_info);
}
static int handle_statechange(void *datap)
{
struct ast_hint *hint;
struct statechange *sc = datap;
struct ast_str *hint_app;
struct ast_hintdevice *device;
struct ast_hintdevice *cmpdevice;
struct statechange *sc = datap;
struct ao2_iterator *dev_iter;
struct ao2_iterator cb_iter;
char context_name[AST_MAX_CONTEXT];
char exten_name[AST_MAX_EXTENSION];
if (ao2_container_count(hintdevices) == 0) {
/* There are no hints monitoring devices. */
@@ -5541,94 +5641,9 @@ static int handle_statechange(void *datap)
}
for (; (device = ao2_iterator_next(dev_iter)); ao2_t_ref(device, -1, "Next device")) {
struct ast_state_cb *state_cb;
int state;
int same_state;
struct ao2_container *device_state_info;
int first_extended_cb_call = 1;
if (!device->hint) {
/* Should never happen. */
continue;
if (device->hint) {
device_state_notify_callbacks(device->hint, &hint_app);
}
hint = device->hint;
ao2_lock(hint);
if (!hint->exten) {
/* The extension has already been destroyed */
ao2_unlock(hint);
continue;
}
/*
* Save off strings in case the hint extension gets destroyed
* while we are notifying the watchers.
*/
ast_copy_string(context_name,
ast_get_context_name(ast_get_extension_context(hint->exten)),
sizeof(context_name));
ast_copy_string(exten_name, ast_get_extension_name(hint->exten),
sizeof(exten_name));
ast_str_set(&hint_app, 0, "%s", ast_get_extension_app(hint->exten));
ao2_unlock(hint);
/*
* Get device state for this hint.
*
* NOTE: We cannot hold any locks while determining the hint
* device state or notifying the watchers without causing a
* deadlock. (conlock, hints, and hint)
*/
/* Make a container so state3 can fill it if we wish.
* If that failed we simply do not provide the extended state info.
*/
device_state_info = alloc_device_state_info();
state = ast_extension_state3(hint_app, device_state_info);
if ((same_state = state == hint->laststate) && (~state & AST_EXTENSION_RINGING)) {
ao2_cleanup(device_state_info);
continue;
}
/* Device state changed since last check - notify the watchers. */
hint->laststate = state; /* record we saw the change */
/* For general callbacks */
cb_iter = ao2_iterator_init(statecbs, 0);
for (; !same_state && (state_cb = ao2_iterator_next(&cb_iter)); ao2_ref(state_cb, -1)) {
execute_state_callback(state_cb->change_cb,
context_name,
exten_name,
state_cb->data,
AST_HINT_UPDATE_DEVICE,
hint,
NULL);
}
ao2_iterator_destroy(&cb_iter);
/* For extension callbacks */
/* extended callbacks are called when the state changed or when AST_EVENT_RINGING is
* included. Normal callbacks are only called when the state changed.
*/
cb_iter = ao2_iterator_init(hint->callbacks, 0);
for (; (state_cb = ao2_iterator_next(&cb_iter)); ao2_ref(state_cb, -1)) {
if (state_cb->extended && first_extended_cb_call) {
/* Fill detailed device_state_info now that we know it is used by extd. callback */
first_extended_cb_call = 0;
get_device_state_causing_channels(device_state_info);
}
if (state_cb->extended || !same_state) {
execute_state_callback(state_cb->change_cb,
context_name,
exten_name,
state_cb->data,
AST_HINT_UPDATE_DEVICE,
hint,
state_cb->extended ? device_state_info : NULL);
}
}
ao2_iterator_destroy(&cb_iter);
ao2_cleanup(device_state_info);
}
ast_mutex_unlock(&context_merge_lock);
@@ -5990,31 +6005,38 @@ static int ast_add_hint(struct ast_exten *e)
return 0;
}
/*! \brief Publish a hint changed event */
static int publish_hint_change(struct ast_hint *hint, struct ast_exten *ne)
{
struct ast_event *event;
/*
* Since hint is an ao2_object we need to pass in a pointer to the hint pointer,
* which gets copied by the event subsystem. The event handler will take care of
* de-referencing the hint.
*/
ao2_ref(hint, +1);
if (!(event = ast_event_new(AST_EVENT_HINT_CHANGE,
AST_EVENT_IE_HINT_CHANGE_PAYLOAD, AST_EVENT_IE_PLTYPE_RAW, &hint,
sizeof(hint), /* We actually want the size of the pointer */
AST_EVENT_IE_END))) {
ao2_ref(hint, -1);
return -1;
}
ast_event_queue_and_cache(event);
return 0;
}
/*! \brief Change hint for an extension */
static int ast_change_hint(struct ast_exten *oe, struct ast_exten *ne)
{
struct ast_str *hint_app;
struct ast_hint *hint;
int previous_device_state;
char *previous_message = NULL;
char *message = NULL;
char *previous_subtype = NULL;
char *subtype = NULL;
int previous_presence_state;
int presence_state;
int presence_state_changed = 0;
if (!oe || !ne) {
return -1;
}
hint_app = ast_str_create(1024);
if (!hint_app) {
return -1;
}
ast_mutex_lock(&context_merge_lock); /* Hold off ast_merge_contexts_and_delete and state changes */
ao2_lock(hints);/* Locked to hold off others while we move the hint around. */
/*
@@ -6025,7 +6047,6 @@ static int ast_change_hint(struct ast_exten *oe, struct ast_exten *ne)
if (!hint) {
ao2_unlock(hints);
ast_mutex_unlock(&context_merge_lock);
ast_free(hint_app);
return -1;
}
@@ -6035,25 +6056,6 @@ static int ast_change_hint(struct ast_exten *oe, struct ast_exten *ne)
ao2_lock(hint);
hint->exten = ne;
/* Store the previous states so we know whether we need to notify state callbacks */
previous_device_state = hint->laststate;
previous_presence_state = hint->last_presence_state;
previous_message = hint->last_presence_message;
previous_subtype = hint->last_presence_subtype;
/* Update the saved device and presence state with the new extension */
hint->laststate = ast_extension_state2(ne, NULL);
hint->last_presence_state = AST_PRESENCE_INVALID;
hint->last_presence_subtype = NULL;
hint->last_presence_message = NULL;
presence_state = extension_presence_state_helper(ne, &subtype, &message);
if (presence_state > 0) {
hint->last_presence_state = presence_state;
hint->last_presence_subtype = subtype;
hint->last_presence_message = message;
}
ao2_unlock(hint);
ao2_link(hints, hint);
@@ -6062,103 +6064,59 @@ static int ast_change_hint(struct ast_exten *oe, struct ast_exten *ne)
ast_get_extension_name(ne),
ast_get_context_name(ast_get_extension_context(ne)));
}
ao2_unlock(hints);
/* Locking for state callbacks is respected here and only the context_merge_lock lock is
* held during the state callback invocation. This will stop the normal state callback
* thread from being able to handle incoming state changes if they occur.
*/
/* Determine if presence state has changed due to the change of the hint extension */
if ((hint->last_presence_state != previous_presence_state) ||
strcmp(S_OR(hint->last_presence_subtype, ""), S_OR(previous_subtype, "")) ||
strcmp(S_OR(hint->last_presence_message, ""), S_OR(previous_message, ""))) {
presence_state_changed = 1;
}
/* Notify any existing state callbacks if the device or presence state has changed */
if ((hint->laststate != previous_device_state) || presence_state_changed) {
struct ao2_iterator cb_iter;
struct ast_state_cb *state_cb;
struct ao2_container *device_state_info;
int first_extended_cb_call = 1;
/* For general callbacks */
cb_iter = ao2_iterator_init(statecbs, 0);
for (; (state_cb = ao2_iterator_next(&cb_iter)); ao2_ref(state_cb, -1)) {
/* Unlike the normal state callbacks since something has explicitly provided us this extension
* it will remain valid and unchanged for the lifetime of this function invocation.
*/
if (hint->laststate != previous_device_state) {
execute_state_callback(state_cb->change_cb,
ast_get_context_name(ast_get_extension_context(ne)),
ast_get_extension_name(ne),
state_cb->data,
AST_HINT_UPDATE_DEVICE,
hint,
NULL);
}
if (presence_state_changed) {
execute_state_callback(state_cb->change_cb,
ast_get_context_name(ast_get_extension_context(ne)),
ast_get_extension_name(ne),
state_cb->data,
AST_HINT_UPDATE_PRESENCE,
hint,
NULL);
}
}
ao2_iterator_destroy(&cb_iter);
ast_str_set(&hint_app, 0, "%s", ast_get_extension_app(ne));
device_state_info = alloc_device_state_info();
ast_extension_state3(hint_app, device_state_info);
/* For extension callbacks */
cb_iter = ao2_iterator_init(hint->callbacks, 0);
for (; (state_cb = ao2_iterator_next(&cb_iter)); ao2_ref(state_cb, -1)) {
if (hint->laststate != previous_device_state) {
if (state_cb->extended && first_extended_cb_call) {
/* Fill detailed device_state_info now that we know it is used by extd. callback */
first_extended_cb_call = 0;
get_device_state_causing_channels(device_state_info);
}
execute_state_callback(state_cb->change_cb,
ast_get_context_name(ast_get_extension_context(ne)),
ast_get_extension_name(ne),
state_cb->data,
AST_HINT_UPDATE_DEVICE,
hint,
state_cb->extended ? device_state_info : NULL);
}
if (presence_state_changed) {
execute_state_callback(state_cb->change_cb,
ast_get_context_name(ast_get_extension_context(ne)),
ast_get_extension_name(ne),
state_cb->data,
AST_HINT_UPDATE_PRESENCE,
hint,
NULL);
}
}
ao2_iterator_destroy(&cb_iter);
ao2_cleanup(device_state_info);
}
publish_hint_change(hint, ne);
ao2_ref(hint, -1);
ast_mutex_unlock(&context_merge_lock);
ast_free(hint_app);
ast_free(previous_message);
ast_free(previous_subtype);
return 0;
}
static int handle_hint_change(void *data)
{
struct ast_hint *hint = data;
struct ast_str *hint_app;
int state;
struct presencechange presence_state;
if (!(hint_app = ast_str_create(1024))) {
return -1;
}
device_state_notify_callbacks(hint, &hint_app);
state = extension_presence_state_helper(
hint->exten, &presence_state.subtype, &presence_state.message);
presence_state.state = state > 0 ? state : AST_PRESENCE_INVALID;
presence_state_notify_callbacks(AST_EVENT_HINT_CHANGE, hint, &hint_app, &presence_state);
ast_free(hint_app);
ao2_ref(hint, -1);
ast_free(presence_state.subtype);
ast_free(presence_state.message);
return 0;
}
static void hint_change_cb(const struct ast_event *event, void *unused)
{
/* The event data is a pointer to a hint (an ao2_object) */
struct ast_hint **hint = (struct ast_hint **)
ast_event_get_ie_raw(event, AST_EVENT_IE_HINT_CHANGE_PAYLOAD);
if (!hint || !*hint) {
return;
}
/* The task processor thread is taking our reference to the hint object. */
if (ast_taskprocessor_push(extension_state_tps, handle_hint_change, *hint) < 0) {
ao2_ref(*hint, -1);
}
}
/*! \brief Get hint for channel */
int ast_get_hint(char *hint, int hintsize, char *name, int namesize, struct ast_channel *c, const char *context, const char *exten)
@@ -12255,6 +12213,9 @@ static void unload_pbx(void)
{
int x;
if (hint_change_sub) {
hint_change_sub = ast_event_unsubscribe(hint_change_sub);
}
if (presence_state_sub) {
presence_state_sub = ast_event_unsubscribe(presence_state_sub);
}
@@ -12316,6 +12277,11 @@ int load_pbx(void)
return -1;
}
if (!(hint_change_sub = ast_event_subscribe(AST_EVENT_HINT_CHANGE, hint_change_cb, "pbx Hint Change", NULL,
AST_EVENT_IE_END))) {
return -1;
}
return 0;
}