CDR: Fix deadlock setting some CDR values.
authorRichard Mudgett <rmudgett@digium.com>
Wed, 6 Dec 2017 00:04:47 +0000 (18:04 -0600)
committerRichard Mudgett <rmudgett@digium.com>
Wed, 6 Dec 2017 21:59:59 +0000 (15:59 -0600)
commit3078b7adc2f93e7fc8f04519845d690290453e6c
treea70cecac2e0f7e497b35cb432395fe6be2a046ce
parent3fc1490bcb3611d2830a9ba37e36a8fa258f60b6
CDR: Fix deadlock setting some CDR values.

Setting channel variables with the AMI Originate action caused a deadlock
when you set CDR(amaflags) or CDR(accountcode).  This path has the channel
locked when the CDR function is called.  The CDR function then
synchronously passes the job to a stasis thread.  The stasis handling
function then attempts to lock the channel.  Deadlock results.

* Avoid deadlock by making the CDR function handle setting amaflags and
accountcode directly on the channel rather than passing it off to the CDR
processing code under a stasis thread to do it.

* Made the CHANNEL function and the CDR function process amaflags the same
way.

* Fixed referencing the wrong message type in cdr_prop_write().

ASTERISK-27460

Change-Id: I5eacb47586bc0b8f8ff76a19bd92d1dc38b75e8f
funcs/func_cdr.c
funcs/func_channel.c