From: Frederic LE FOLL Date: Wed, 27 Nov 2019 17:34:24 +0000 (+0100) Subject: app_chanisavail/cdr: ChanIsAvail sometimes fails to deactivate CDR. X-Git-Tag: 17.2.0-rc1~42^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a0e31cc14e524f720aa80beaac9fcb9fff5e4b24;p=thirdparty%2Fasterisk.git app_chanisavail/cdr: ChanIsAvail sometimes fails to deactivate CDR. Temporary channel lifespan is very short and CDR deactivation request through ast_cdr_set_property() may happen when CDR is not available yet. Use CDR_PROP() dialplan function instead, it will first wait for pending CDR insertion requests to be processed. ASTERISK-28636 Change-Id: I1cbe09e8d2169c0962c1195133ff260d291f2074 --- diff --git a/apps/app_chanisavail.c b/apps/app_chanisavail.c index 446bce1b01..1c7c1ec3bf 100644 --- a/apps/app_chanisavail.c +++ b/apps/app_chanisavail.c @@ -134,6 +134,8 @@ static int chanavail_exec(struct ast_channel *chan, const char *data) } peers = args.reqchans; if (peers) { + struct ast_custom_function *cdr_prop_func = ast_custom_function_find("CDR_PROP"); + cur = peers; do { /* remember where to start next time */ @@ -179,7 +181,9 @@ static int chanavail_exec(struct ast_channel *chan, const char *data) ast_str_append(&tmp_availcause, 0, "%s%s", ast_str_strlen(tmp_availcause) ? "&" : "", tmp); /* Disable CDR for this temporary channel. */ - ast_cdr_set_property(ast_channel_name(tempchan), AST_CDR_FLAG_DISABLE_ALL); + if (cdr_prop_func) { + ast_func_write(tempchan, "CDR_PROP(disable)", "1"); + } ast_hangup(tempchan); tempchan = NULL; @@ -212,4 +216,9 @@ static int load_module(void) AST_MODULE_LOAD_DECLINE : AST_MODULE_LOAD_SUCCESS; } -AST_MODULE_INFO_STANDARD_EXTENDED(ASTERISK_GPL_KEY, "Check channel availability"); +AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Check channel availability", + .support_level = AST_MODULE_SUPPORT_EXTENDED, + .load = load_module, + .unload = unload_module, + .optional_modules = "func_cdr" +);