release note highlights
* channels/chan_sip.c: Optimization to buffer initialization fix.
* main/channel.c: prevent double masqurading channels when one is
been hung up and deadlock avoidance is used. There is a race
condition in ast_do_masquerade / ast_hangup (at least) Reported
by me signed off by schmidts with input from David Vossel Review:
* channels/chan_sip.c: Fix a SIP transfer deadlock. The locking in
this function is very scary. There are like 6 structs involved.
(closes issue AST-470)
* main/pbx.c: Deadlocks dealing with dialplan hints during reload.
There are two remaining different deadlocks reported dealing with
dialplan hints. The deadlock in ASTERISK-17666 is caused by
invalid locking order in ast_remove_hint(). The hints container
must be locked before the hint object. The deadlock in
ASTERISK-17760 is caused by a catch-22 situation in
handle_statechange(). The deadlock is caused by not having the
conlock before calling the watcher callbacks. Unfortunately,
having that lock causes a different deadlock as reported in
ASTERISK-16961. * Fixed ast_remove_hint() locking order. * Made
handle_statechange() no longer call the watcher callbacks holding
any locks that matter. * Made hint ao2 destructor do the watcher
callbacks for extension deactivation to guarantee that they get
called. * Fixed hint reference leak in ast_add_hint() if the
callback container constructor failed. * Fixed hint reference
leak in complete_core_show_hint() for every hint it found for CLI
tab completion. * Adjusted locking in
ast_merge_contexts_and_delete() for safety. * Added
context_merge_lock to prevent ast_merge_contexts_and_delete() and
handle_statechange() from interfering with each other. * Fixed
ast_change_hint() not taking into account that the extension is
used for the hash key. (closes issue ASTERISK-17666) Reported by:
irroot Tested by: irroot JIRA SWP-3318 (closes issue
ASTERISK-17760) Reported by: Byron Clark Tested by: irroot JIRA
SWP-3393 Review: https://reviewboard.asterisk.org/r/1313/
* apps/app_directed_pickup.c: Update PickupChan documentation. The
PickupChan uses the ampersand as the argument separator. Was
documented as: PickupChan(channel[,channel2[,...][,options]])
Fixed documentation to:
This is a continuation of ASTERISK-17494 for v1.8 and later.
(closes issue ASTERISK-18144) Reported by: Erik Smith Patches:
pickupchan_ducumentation-v2.patch (License #6263) patch uploaded
by Erik Smith Tested by: Erik Smith
* res/res_timing_timerfd.c: Reverts fix for timerfd locking issue.
jrose discovered a performance issue with this fix that prevents
his analog phones from working when using timerfd as a timing
source. Until it is understood what is causing this performance
problem, this patch is being reverted.
* channels/chan_sip.c: Better way to get chan and pvt lock for
issue ASTERISK-17431. Redoes -r308945 for issue ASTERISK-17431
deadlock fix for sip_set_udptl_peer() and sip_set_rtp_peer(). *
Lock the channels in the defined order and avoid the need for a
deadlock avoidance loop. * Lock the channel before getting the
pointer to the private structure to be sure that the pointer will
not change due to a masquerade or channel hangup. * To preserve
sanity, check that chan and p->owner are the same. (Pointer
rearangements should not happen without the protection of locks
because bad things tend to happen otherwise.)
I dont have a system that locks up nearly frequent enough to test if this release solves the 'deadlock' issues of the past. I go months between them because my customers never use the portals.