Update for 21.12.0

This commit is contained in:
Asterisk Development Team
2025-11-20 19:48:44 +00:00
parent 0e3c16fa18
commit 7e1834cbb1
9 changed files with 83 additions and 220 deletions

View File

@@ -1 +1 @@
21.12.0-rc2 21.12.0

View File

@@ -1 +1 @@
ChangeLogs/ChangeLog-21.12.0-rc2.html ChangeLogs/ChangeLog-21.12.0.html

View File

@@ -1 +1 @@
ChangeLogs/ChangeLog-21.12.0-rc2.md ChangeLogs/ChangeLog-21.12.0.md

View File

@@ -1,61 +0,0 @@
<html><head><title>ChangeLog for asterisk-21.12.0-rc2</title></head><body>
<h2>Change Log for Release asterisk-21.12.0-rc2</h2>
<h3>Links:</h3>
<ul>
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-21.12.0-rc2.html">Full ChangeLog</a> </li>
<li><a href="https://github.com/asterisk/asterisk/compare/21.12.0-rc1...21.12.0-rc2">GitHub Diff</a> </li>
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-21.12.0-rc2.tar.gz">Tarball</a> </li>
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk">Downloads</a> </li>
</ul>
<h3>Summary:</h3>
<ul>
<li>Commits: 1</li>
<li>Commit Authors: 1</li>
<li>Issues Resolved: 1</li>
<li>Security Advisories Resolved: 0</li>
</ul>
<h3>User Notes:</h3>
<h3>Upgrade Notes:</h3>
<h3>Developer Notes:</h3>
<h3>Commit Authors:</h3>
<ul>
<li>George Joseph: (1)</li>
</ul>
<h2>Issue and Commit Detail:</h2>
<h3>Closed Issues:</h3>
<ul>
<li>1578: [bug]: Deadlock with externalMedia custom channel id and cpp map channel backend</li>
</ul>
<h3>Commits By Author:</h3>
<ul>
<li>
<h4>George Joseph (1):</h4>
</li>
</ul>
<h3>Commit List:</h3>
<ul>
<li>channelstorage: Allow storage driver read locking to be skipped.</li>
</ul>
<h3>Commit Details:</h3>
<h4>channelstorage: Allow storage driver read locking to be skipped.</h4>
<p>Author: George Joseph
Date: 2025-11-06</p>
<p>After PR #1498 added read locking to channelstorage_cpp_map_name_id, if ARI
channels/externalMedia was called with a custom channel id AND the
cpp_map_name_id channel storage backend is in use, a deadlock can occur when
hanging up the channel. It's actually triggered in
channel.c:__ast_channel_alloc_ap() when it gets a write lock on the
channelstorage driver then subsequently does a lookup for channel uniqueid
which now does a read lock. This is an invalid operation and causes the lock
state to get "bad". When the channels try to hang up, a write lock is
attempted again which hangs and causes the deadlock.</p>
<p>Now instead of the cpp_map_name_id channelstorage driver "get" APIs
automatically performing a read lock, they take a "lock" parameter which
allows a caller who already has a write lock to indicate that the "get" API
must not attempt its own lock. This prevents the state from getting mesed up.</p>
<p>The ao2_legacy driver uses the ao2 container's recursive mutex so doesn't
have this issue but since it also implements the common channelstorage API,
it needed its "get" implementations updated to take the lock parameter. They
just don't use it.</p>
<p>Resolves: #1578</p>
</body></html>

View File

@@ -1,72 +0,0 @@
## Change Log for Release asterisk-21.12.0-rc2
### Links:
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-21.12.0-rc2.html)
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/21.12.0-rc1...21.12.0-rc2)
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-21.12.0-rc2.tar.gz)
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
### Summary:
- Commits: 1
- Commit Authors: 1
- Issues Resolved: 1
- Security Advisories Resolved: 0
### User Notes:
### Upgrade Notes:
### Developer Notes:
### Commit Authors:
- George Joseph: (1)
## Issue and Commit Detail:
### Closed Issues:
- 1578: [bug]: Deadlock with externalMedia custom channel id and cpp map channel backend
### Commits By Author:
- #### George Joseph (1):
### Commit List:
- channelstorage: Allow storage driver read locking to be skipped.
### Commit Details:
#### channelstorage: Allow storage driver read locking to be skipped.
Author: George Joseph
Date: 2025-11-06
After PR #1498 added read locking to channelstorage_cpp_map_name_id, if ARI
channels/externalMedia was called with a custom channel id AND the
cpp_map_name_id channel storage backend is in use, a deadlock can occur when
hanging up the channel. It's actually triggered in
channel.c:__ast_channel_alloc_ap() when it gets a write lock on the
channelstorage driver then subsequently does a lookup for channel uniqueid
which now does a read lock. This is an invalid operation and causes the lock
state to get "bad". When the channels try to hang up, a write lock is
attempted again which hangs and causes the deadlock.
Now instead of the cpp_map_name_id channelstorage driver "get" APIs
automatically performing a read lock, they take a "lock" parameter which
allows a caller who already has a write lock to indicate that the "get" API
must not attempt its own lock. This prevents the state from getting mesed up.
The ao2_legacy driver uses the ao2 container's recursive mutex so doesn't
have this issue but since it also implements the common channelstorage API,
it needed its "get" implementations updated to take the lock parameter. They
just don't use it.
Resolves: #1578

View File

@@ -1,17 +1,17 @@
<html><head><title>ChangeLog for asterisk-21.12.0-rc1</title></head><body> <html><head><title>ChangeLog for asterisk-21.12.0</title></head><body>
<h2>Change Log for Release asterisk-21.12.0-rc1</h2> <h2>Change Log for Release asterisk-21.12.0</h2>
<h3>Links:</h3> <h3>Links:</h3>
<ul> <ul>
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-21.12.0-rc1.html">Full ChangeLog</a> </li> <li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-21.12.0.html">Full ChangeLog</a> </li>
<li><a href="https://github.com/asterisk/asterisk/compare/21.11.0...21.12.0-rc1">GitHub Diff</a> </li> <li><a href="https://github.com/asterisk/asterisk/compare/21.11.0...21.12.0">GitHub Diff</a> </li>
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-21.12.0-rc1.tar.gz">Tarball</a> </li> <li><a href="https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-21.12.0.tar.gz">Tarball</a> </li>
<li><a href="https://downloads.asterisk.org/pub/telephony/asterisk">Downloads</a> </li> <li><a href="https://downloads.asterisk.org/pub/telephony/asterisk">Downloads</a> </li>
</ul> </ul>
<h3>Summary:</h3> <h3>Summary:</h3>
<ul> <ul>
<li>Commits: 19</li> <li>Commits: 20</li>
<li>Commit Authors: 10</li> <li>Commit Authors: 10</li>
<li>Issues Resolved: 12</li> <li>Issues Resolved: 13</li>
<li>Security Advisories Resolved: 0</li> <li>Security Advisories Resolved: 0</li>
</ul> </ul>
<h3>User Notes:</h3> <h3>User Notes:</h3>
@@ -43,14 +43,14 @@
<ul> <ul>
<li>Bastian Triller: (1)</li> <li>Bastian Triller: (1)</li>
<li>Ben Ford: (1)</li> <li>Ben Ford: (1)</li>
<li>George Joseph: (3)</li> <li>George Joseph: (4)</li>
<li>Igor Goncharovsky: (1)</li> <li>Igor Goncharovsky: (1)</li>
<li>Max Grobecker: (1)</li> <li>Max Grobecker: (1)</li>
<li>Nathan Monfils: (1)</li> <li>Nathan Monfils: (1)</li>
<li>Naveen Albert: (4)</li> <li>Naveen Albert: (4)</li>
<li>Phoneben: (1)</li>
<li>Sean Bright: (3)</li> <li>Sean Bright: (3)</li>
<li>Sven Kube: (3)</li> <li>Sven Kube: (3)</li>
<li>phoneben: (1)</li>
</ul> </ul>
<h2>Issue and Commit Detail:</h2> <h2>Issue and Commit Detail:</h2>
<h3>Closed Issues:</h3> <h3>Closed Issues:</h3>
@@ -67,6 +67,7 @@
<li>1525: [bug]: chan_websocket: fix use of raw payload variable for string comparison in process_text_message</li> <li>1525: [bug]: chan_websocket: fix use of raw payload variable for string comparison in process_text_message</li>
<li>1539: [bug]: safe_asterisk without TTY doesn't log to file</li> <li>1539: [bug]: safe_asterisk without TTY doesn't log to file</li>
<li>1554: [bug]: safe_asterisk recurses into subdirectories of startup.d after f97361</li> <li>1554: [bug]: safe_asterisk recurses into subdirectories of startup.d after f97361</li>
<li>1578: [bug]: Deadlock with externalMedia custom channel id and cpp map channel backend</li>
</ul> </ul>
<h3>Commits By Author:</h3> <h3>Commits By Author:</h3>
<ul> <ul>
@@ -74,72 +75,36 @@
<h4>Bastian Triller (1):</h4> <h4>Bastian Triller (1):</h4>
</li> </li>
<li> <li>
<p>Fix some doxygen, typos and whitespace</p>
</li>
<li>
<h4>Ben Ford (1):</h4> <h4>Ben Ford (1):</h4>
</li> </li>
<li> <li>
<p>rtp_engine.c: Add exception for comfort noise payload.</p> <h4>George Joseph (4):</h4>
</li>
<li>
<h4>George Joseph (3):</h4>
</li>
<li>channelstorage_cpp_map_name_id: Add read locking around retrievals.</li>
<li>chan_websocket.c: Change payload references to command instead.</li>
<li>
<p>safe_asterisk: Fix logging and sorting issue.</p>
</li> </li>
<li> <li>
<h4>Igor Goncharovsky (1):</h4> <h4>Igor Goncharovsky (1):</h4>
</li> </li>
<li> <li>
<p>func_hangupcause.c: Add access to Reason headers via HANGUPCAUSE()</p>
</li>
<li>
<h4>Max Grobecker (1):</h4> <h4>Max Grobecker (1):</h4>
</li> </li>
<li> <li>
<p>res_pjsip_geolocation: Add support for Geolocation loc-src parameter</p>
</li>
<li>
<h4>Nathan Monfils (1):</h4> <h4>Nathan Monfils (1):</h4>
</li> </li>
<li> <li>
<p>manager.c: Fix presencestate object leak</p>
</li>
<li>
<h4>Naveen Albert (4):</h4> <h4>Naveen Albert (4):</h4>
</li> </li>
<li>pbx_variables.c: Create real channel for "dialplan eval function".</li>
<li>res_cliexec: Remove unnecessary casts to char*.</li>
<li>app_adsiprog: Fix possible NULL dereference.</li>
<li>
<p>chan_dahdi: Add DAHDI_CHANNEL function.</p>
</li>
<li> <li>
<h4>Sean Bright (3):</h4> <h4>Sean Bright (3):</h4>
</li> </li>
<li>audiohook.c: Ensure correct AO2 reference is dereffed.</li>
<li>app_externalivr: Prevent out-of-bounds read during argument processing.</li>
<li>
<p>safe_asterisk: Resolve a POSIX sh problem and restore globbing behavior.</p>
</li>
<li> <li>
<h4>Sven Kube (3):</h4> <h4>Sven Kube (3):</h4>
</li> </li>
<li>stasis_channels.c: Add null check for referred_by in ast_ari_transfer_message_..</li>
<li>stasis_channels.c: Make protocol_id optional to enable blind transfer via ari</li>
<li>
<p>res_audiosocket: add message types for all slin sample rates</p>
</li>
<li> <li>
<h4>phoneben (1):</h4> <h4>phoneben (1):</h4>
</li> </li>
<li>app_queue: Add NULL pointer checks in app_queue</li>
</ul> </ul>
<h3>Commit List:</h3> <h3>Commit List:</h3>
<ul> <ul>
<li>channelstorage: Allow storage driver read locking to be skipped.</li>
<li>safe_asterisk: Resolve a POSIX sh problem and restore globbing behavior.</li> <li>safe_asterisk: Resolve a POSIX sh problem and restore globbing behavior.</li>
<li>safe_asterisk: Fix logging and sorting issue.</li> <li>safe_asterisk: Fix logging and sorting issue.</li>
<li>res_audiosocket: add message types for all slin sample rates</li> <li>res_audiosocket: add message types for all slin sample rates</li>
@@ -149,6 +114,7 @@
<li>res_pjsip_geolocation: Add support for Geolocation loc-src parameter</li> <li>res_pjsip_geolocation: Add support for Geolocation loc-src parameter</li>
<li>stasis_channels.c: Make protocol_id optional to enable blind transfer via ari</li> <li>stasis_channels.c: Make protocol_id optional to enable blind transfer via ari</li>
<li>Fix some doxygen, typos and whitespace</li> <li>Fix some doxygen, typos and whitespace</li>
<li>stasis_channels.c: Add null check for referred_by in ast_ari_transfer_message_create</li>
<li>app_queue: Add NULL pointer checks in app_queue</li> <li>app_queue: Add NULL pointer checks in app_queue</li>
<li>app_externalivr: Prevent out-of-bounds read during argument processing.</li> <li>app_externalivr: Prevent out-of-bounds read during argument processing.</li>
<li>chan_dahdi: Add DAHDI_CHANNEL function.</li> <li>chan_dahdi: Add DAHDI_CHANNEL function.</li>
@@ -160,6 +126,27 @@
<li>pbx_variables.c: Create real channel for "dialplan eval function".</li> <li>pbx_variables.c: Create real channel for "dialplan eval function".</li>
</ul> </ul>
<h3>Commit Details:</h3> <h3>Commit Details:</h3>
<h4>channelstorage: Allow storage driver read locking to be skipped.</h4>
<p>Author: George Joseph
Date: 2025-11-06</p>
<p>After PR #1498 added read locking to channelstorage_cpp_map_name_id, if ARI
channels/externalMedia was called with a custom channel id AND the
cpp_map_name_id channel storage backend is in use, a deadlock can occur when
hanging up the channel. It's actually triggered in
channel.c:__ast_channel_alloc_ap() when it gets a write lock on the
channelstorage driver then subsequently does a lookup for channel uniqueid
which now does a read lock. This is an invalid operation and causes the lock
state to get "bad". When the channels try to hang up, a write lock is
attempted again which hangs and causes the deadlock.</p>
<p>Now instead of the cpp_map_name_id channelstorage driver "get" APIs
automatically performing a read lock, they take a "lock" parameter which
allows a caller who already has a write lock to indicate that the "get" API
must not attempt its own lock. This prevents the state from getting mesed up.</p>
<p>The ao2_legacy driver uses the ao2 container's recursive mutex so doesn't
have this issue but since it also implements the common channelstorage API,
it needed its "get" implementations updated to take the lock parameter. They
just don't use it.</p>
<p>Resolves: #1578</p>
<h4>safe_asterisk: Resolve a POSIX sh problem and restore globbing behavior.</h4> <h4>safe_asterisk: Resolve a POSIX sh problem and restore globbing behavior.</h4>
<p>Author: Sean Bright <p>Author: Sean Bright
Date: 2025-10-22</p> Date: 2025-10-22</p>
@@ -234,7 +221,7 @@
<h4>Fix some doxygen, typos and whitespace</h4> <h4>Fix some doxygen, typos and whitespace</h4>
<p>Author: Bastian Triller <p>Author: Bastian Triller
Date: 2025-09-21</p> Date: 2025-09-21</p>
<h4>stasis_channels.c: Add null check for referred_by in ast_ari_transfer_message_..</h4> <h4>stasis_channels.c: Add null check for referred_by in ast_ari_transfer_message_create</h4>
<p>Author: Sven Kube <p>Author: Sven Kube
Date: 2025-09-18</p> Date: 2025-09-18</p>
<p>When handling SIP transfers via ARI, the <code>referred_by</code> field in <p>When handling SIP transfers via ARI, the <code>referred_by</code> field in

View File

@@ -1,18 +1,18 @@
## Change Log for Release asterisk-21.12.0-rc1 ## Change Log for Release asterisk-21.12.0
### Links: ### Links:
- [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-21.12.0-rc1.html) - [Full ChangeLog](https://downloads.asterisk.org/pub/telephony/asterisk/releases/ChangeLog-21.12.0.html)
- [GitHub Diff](https://github.com/asterisk/asterisk/compare/21.11.0...21.12.0-rc1) - [GitHub Diff](https://github.com/asterisk/asterisk/compare/21.11.0...21.12.0)
- [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-21.12.0-rc1.tar.gz) - [Tarball](https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-21.12.0.tar.gz)
- [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk) - [Downloads](https://downloads.asterisk.org/pub/telephony/asterisk)
### Summary: ### Summary:
- Commits: 19 - Commits: 20
- Commit Authors: 10 - Commit Authors: 10
- Issues Resolved: 12 - Issues Resolved: 13
- Security Advisories Resolved: 0 - Security Advisories Resolved: 0
### User Notes: ### User Notes:
@@ -44,14 +44,14 @@
- Bastian Triller: (1) - Bastian Triller: (1)
- Ben Ford: (1) - Ben Ford: (1)
- George Joseph: (3) - George Joseph: (4)
- Igor Goncharovsky: (1) - Igor Goncharovsky: (1)
- Max Grobecker: (1) - Max Grobecker: (1)
- Nathan Monfils: (1) - Nathan Monfils: (1)
- Naveen Albert: (4) - Naveen Albert: (4)
- Phoneben: (1)
- Sean Bright: (3) - Sean Bright: (3)
- Sven Kube: (3) - Sven Kube: (3)
- phoneben: (1)
## Issue and Commit Detail: ## Issue and Commit Detail:
@@ -69,51 +69,33 @@
- 1525: [bug]: chan_websocket: fix use of raw payload variable for string comparison in process_text_message - 1525: [bug]: chan_websocket: fix use of raw payload variable for string comparison in process_text_message
- 1539: [bug]: safe_asterisk without TTY doesn't log to file - 1539: [bug]: safe_asterisk without TTY doesn't log to file
- 1554: [bug]: safe_asterisk recurses into subdirectories of startup.d after f97361 - 1554: [bug]: safe_asterisk recurses into subdirectories of startup.d after f97361
- 1578: [bug]: Deadlock with externalMedia custom channel id and cpp map channel backend
### Commits By Author: ### Commits By Author:
- #### Bastian Triller (1): - #### Bastian Triller (1):
- Fix some doxygen, typos and whitespace
- #### Ben Ford (1): - #### Ben Ford (1):
- rtp_engine.c: Add exception for comfort noise payload.
- #### George Joseph (3): - #### George Joseph (4):
- channelstorage_cpp_map_name_id: Add read locking around retrievals.
- chan_websocket.c: Change payload references to command instead.
- safe_asterisk: Fix logging and sorting issue.
- #### Igor Goncharovsky (1): - #### Igor Goncharovsky (1):
- func_hangupcause.c: Add access to Reason headers via HANGUPCAUSE()
- #### Max Grobecker (1): - #### Max Grobecker (1):
- res_pjsip_geolocation: Add support for Geolocation loc-src parameter
- #### Nathan Monfils (1): - #### Nathan Monfils (1):
- manager.c: Fix presencestate object leak
- #### Naveen Albert (4): - #### Naveen Albert (4):
- pbx_variables.c: Create real channel for "dialplan eval function".
- res_cliexec: Remove unnecessary casts to char*.
- app_adsiprog: Fix possible NULL dereference.
- chan_dahdi: Add DAHDI_CHANNEL function.
- #### Sean Bright (3): - #### Sean Bright (3):
- audiohook.c: Ensure correct AO2 reference is dereffed.
- app_externalivr: Prevent out-of-bounds read during argument processing.
- safe_asterisk: Resolve a POSIX sh problem and restore globbing behavior.
- #### Sven Kube (3): - #### Sven Kube (3):
- stasis_channels.c: Add null check for referred_by in ast_ari_transfer_message_..
- stasis_channels.c: Make protocol_id optional to enable blind transfer via ari
- res_audiosocket: add message types for all slin sample rates
- #### phoneben (1): - #### phoneben (1):
- app_queue: Add NULL pointer checks in app_queue
### Commit List: ### Commit List:
- channelstorage: Allow storage driver read locking to be skipped.
- safe_asterisk: Resolve a POSIX sh problem and restore globbing behavior. - safe_asterisk: Resolve a POSIX sh problem and restore globbing behavior.
- safe_asterisk: Fix logging and sorting issue. - safe_asterisk: Fix logging and sorting issue.
- res_audiosocket: add message types for all slin sample rates - res_audiosocket: add message types for all slin sample rates
@@ -123,6 +105,7 @@
- res_pjsip_geolocation: Add support for Geolocation loc-src parameter - res_pjsip_geolocation: Add support for Geolocation loc-src parameter
- stasis_channels.c: Make protocol_id optional to enable blind transfer via ari - stasis_channels.c: Make protocol_id optional to enable blind transfer via ari
- Fix some doxygen, typos and whitespace - Fix some doxygen, typos and whitespace
- stasis_channels.c: Add null check for referred_by in ast_ari_transfer_message_create
- app_queue: Add NULL pointer checks in app_queue - app_queue: Add NULL pointer checks in app_queue
- app_externalivr: Prevent out-of-bounds read during argument processing. - app_externalivr: Prevent out-of-bounds read during argument processing.
- chan_dahdi: Add DAHDI_CHANNEL function. - chan_dahdi: Add DAHDI_CHANNEL function.
@@ -135,6 +118,32 @@
### Commit Details: ### Commit Details:
#### channelstorage: Allow storage driver read locking to be skipped.
Author: George Joseph
Date: 2025-11-06
After PR #1498 added read locking to channelstorage_cpp_map_name_id, if ARI
channels/externalMedia was called with a custom channel id AND the
cpp_map_name_id channel storage backend is in use, a deadlock can occur when
hanging up the channel. It's actually triggered in
channel.c:__ast_channel_alloc_ap() when it gets a write lock on the
channelstorage driver then subsequently does a lookup for channel uniqueid
which now does a read lock. This is an invalid operation and causes the lock
state to get "bad". When the channels try to hang up, a write lock is
attempted again which hangs and causes the deadlock.
Now instead of the cpp_map_name_id channelstorage driver "get" APIs
automatically performing a read lock, they take a "lock" parameter which
allows a caller who already has a write lock to indicate that the "get" API
must not attempt its own lock. This prevents the state from getting mesed up.
The ao2_legacy driver uses the ao2 container's recursive mutex so doesn't
have this issue but since it also implements the common channelstorage API,
it needed its "get" implementations updated to take the lock parameter. They
just don't use it.
Resolves: #1578
#### safe_asterisk: Resolve a POSIX sh problem and restore globbing behavior. #### safe_asterisk: Resolve a POSIX sh problem and restore globbing behavior.
Author: Sean Bright Author: Sean Bright
Date: 2025-10-22 Date: 2025-10-22
@@ -235,7 +244,7 @@
Date: 2025-09-21 Date: 2025-09-21
#### stasis_channels.c: Add null check for referred_by in ast_ari_transfer_message_.. #### stasis_channels.c: Add null check for referred_by in ast_ari_transfer_message_create
Author: Sven Kube Author: Sven Kube
Date: 2025-09-18 Date: 2025-09-18

View File

@@ -1,4 +1,4 @@
<html><head><title>Readme for asterisk-21.12.0-rc2</title></head><body> <html><head><title>Readme for asterisk-21.12.0</title></head><body>
<h1>The Asterisk(R) Open Source PBX</h1> <h1>The Asterisk(R) Open Source PBX</h1>
<pre><code>By Mark Spencer &lt;markster@digium.com&gt; and the Asterisk.org developer community. <pre><code>By Mark Spencer &lt;markster@digium.com&gt; and the Asterisk.org developer community.
Copyright (C) 2001-2025 Sangoma Technologies Corporation and other copyright holders. Copyright (C) 2001-2025 Sangoma Technologies Corporation and other copyright holders.
@@ -37,7 +37,7 @@ hardware.</p>
<p>If you are updating from a previous version of Asterisk, make sure you <p>If you are updating from a previous version of Asterisk, make sure you
read the Change Logs.</p> read the Change Logs.</p>
<!-- CHANGELOGS (the URL will change based on the location of this README) --> <!-- CHANGELOGS (the URL will change based on the location of this README) -->
<p><a href="ChangeLogs/ChangeLog-21.12.0-rc2.html">Change Logs</a></p> <p><a href="ChangeLogs/ChangeLog-21.12.0.html">Change Logs</a></p>
<!-- END-CHANGELOGS --> <!-- END-CHANGELOGS -->
<h3>NEW INSTALLATIONS</h3> <h3>NEW INSTALLATIONS</h3>

View File

@@ -55,7 +55,7 @@ If you are updating from a previous version of Asterisk, make sure you
read the Change Logs. read the Change Logs.
<!-- CHANGELOGS (the URL will change based on the location of this README) --> <!-- CHANGELOGS (the URL will change based on the location of this README) -->
[Change Logs](ChangeLogs/ChangeLog-21.12.0-rc2.html) [Change Logs](ChangeLogs/ChangeLog-21.12.0.html)
<!-- END-CHANGELOGS --> <!-- END-CHANGELOGS -->
### NEW INSTALLATIONS ### NEW INSTALLATIONS