<p>Joshua Colp has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/16310">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">cdr_syslog: Remove deprecated module.<br><br>ASTERISK-29592<br><br>Change-Id: Ic8eb6a2100ad5bc3b48338a6d0a6cfa70ecbc50f<br>---<br>D cdr/cdr_syslog.c<br>A doc/UPGRADE-staging/cdr_syslog_removal.txt<br>2 files changed, 6 insertions(+), 298 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/10/16310/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/cdr/cdr_syslog.c b/cdr/cdr_syslog.c</span><br><span>deleted file mode 100644</span><br><span>index 84e19b9..0000000</span><br><span>--- a/cdr/cdr_syslog.c</span><br><span>+++ /dev/null</span><br><span>@@ -1,298 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-/*</span><br><span style="color: hsl(0, 100%, 40%);">- * Asterisk -- An open source telephony toolkit.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * Copyright (C) 2009, malleable, LLC.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * Sean Bright <sean@malleable.com></span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * See http://www.asterisk.org for more information about</span><br><span style="color: hsl(0, 100%, 40%);">- * the Asterisk project. Please do not directly contact</span><br><span style="color: hsl(0, 100%, 40%);">- * any of the maintainers of this project for assistance;</span><br><span style="color: hsl(0, 100%, 40%);">- * the project provides a web site, mailing lists and IRC</span><br><span style="color: hsl(0, 100%, 40%);">- * channels for your use.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * This program is free software, distributed under the terms of</span><br><span style="color: hsl(0, 100%, 40%);">- * the GNU General Public License Version 2. See the LICENSE file</span><br><span style="color: hsl(0, 100%, 40%);">- * at the top of the source tree.</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*!</span><br><span style="color: hsl(0, 100%, 40%);">- * \file</span><br><span style="color: hsl(0, 100%, 40%);">- * \brief syslog CDR logger</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * \author Sean Bright <sean@malleable.com></span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * See also</span><br><span style="color: hsl(0, 100%, 40%);">- * \arg \ref Config_cdr</span><br><span style="color: hsl(0, 100%, 40%);">- * \ingroup cdr_drivers</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*! \li \ref cdr_syslog.c uses the configuration file \ref cdr_syslog.conf</span><br><span style="color: hsl(0, 100%, 40%);">- * \addtogroup configuration_file Configuration Files</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*!</span><br><span style="color: hsl(0, 100%, 40%);">- * \page cdr_syslog.conf cdr_syslog.conf</span><br><span style="color: hsl(0, 100%, 40%);">- * \verbinclude cdr_syslog.conf.sample</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*** MODULEINFO</span><br><span style="color: hsl(0, 100%, 40%);">-    <depend>syslog</depend></span><br><span style="color: hsl(0, 100%, 40%);">-     <defaultenabled>no</defaultenabled></span><br><span style="color: hsl(0, 100%, 40%);">- <support_level>deprecated</support_level></span><br><span style="color: hsl(0, 100%, 40%);">-   <deprecated_in>16</deprecated_in></span><br><span style="color: hsl(0, 100%, 40%);">-   <removed_in>19</removed_in></span><br><span style="color: hsl(0, 100%, 40%);">-***/</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk.h"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/module.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/lock.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/cdr.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/pbx.h"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include <syslog.h></span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/syslog.h"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static const char CONFIG[] = "cdr_syslog.conf";</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-AST_THREADSTORAGE(syslog_buf);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static const char name[] = "cdr-syslog";</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct cdr_syslog_config {</span><br><span style="color: hsl(0, 100%, 40%);">-    AST_DECLARE_STRING_FIELDS(</span><br><span style="color: hsl(0, 100%, 40%);">-              AST_STRING_FIELD(ident);</span><br><span style="color: hsl(0, 100%, 40%);">-                AST_STRING_FIELD(format);</span><br><span style="color: hsl(0, 100%, 40%);">-       );</span><br><span style="color: hsl(0, 100%, 40%);">-      int facility;</span><br><span style="color: hsl(0, 100%, 40%);">-   int priority;</span><br><span style="color: hsl(0, 100%, 40%);">-   ast_mutex_t lock;</span><br><span style="color: hsl(0, 100%, 40%);">-       AST_LIST_ENTRY(cdr_syslog_config) list;</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static AST_RWLIST_HEAD_STATIC(sinks, cdr_syslog_config);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static void free_config(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- struct cdr_syslog_config *sink;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- while ((sink = AST_RWLIST_REMOVE_HEAD(&sinks, list))) {</span><br><span style="color: hsl(0, 100%, 40%);">-             ast_mutex_destroy(&sink->lock);</span><br><span style="color: hsl(0, 100%, 40%);">-          ast_string_field_free_memory(sink);</span><br><span style="color: hsl(0, 100%, 40%);">-             ast_free(sink);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static int syslog_log(struct ast_cdr *cdr)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-   struct ast_channel *dummy;</span><br><span style="color: hsl(0, 100%, 40%);">-      struct ast_str *str;</span><br><span style="color: hsl(0, 100%, 40%);">-    struct cdr_syslog_config *sink;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* Batching saves memory management here.  Otherwise, it's the same as doing an</span><br><span style="color: hsl(0, 100%, 40%);">-        allocation and free each time. */</span><br><span style="color: hsl(0, 100%, 40%);">-    if (!(str = ast_str_thread_get(&syslog_buf, 16))) {</span><br><span style="color: hsl(0, 100%, 40%);">-         return -1;</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (!(dummy = ast_dummy_channel_alloc())) {</span><br><span style="color: hsl(0, 100%, 40%);">-             ast_log(AST_LOG_ERROR, "Unable to allocate channel for variable substitution.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            return -1;</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* We need to dup here since the cdr actually belongs to the other channel,</span><br><span style="color: hsl(0, 100%, 40%);">-        so when we release this channel we don't want the CDR getting cleaned</span><br><span style="color: hsl(0, 100%, 40%);">-       up prematurely. */</span><br><span style="color: hsl(0, 100%, 40%);">-   ast_channel_cdr_set(dummy, ast_cdr_dup(cdr));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   AST_RWLIST_RDLOCK(&sinks);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  AST_LIST_TRAVERSE(&sinks, sink, list) {</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-             ast_str_substitute_variables(&str, 0, dummy, sink->format);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-              /* Even though we have a lock on the list, we could be being chased by</span><br><span style="color: hsl(0, 100%, 40%);">-             another thread and this lock ensures that we won't step on anyone's</span><br><span style="color: hsl(0, 100%, 40%);">-             toes.  Once each CDR backend gets it's own thread, this lock can be</span><br><span style="color: hsl(0, 100%, 40%);">-                 removed. */</span><br><span style="color: hsl(0, 100%, 40%);">-          ast_mutex_lock(&sink->lock);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-             openlog(sink->ident, LOG_CONS, sink->facility);</span><br><span style="color: hsl(0, 100%, 40%);">-           syslog(sink->priority, "%s", ast_str_buffer(str));</span><br><span style="color: hsl(0, 100%, 40%);">-         closelog();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-             ast_mutex_unlock(&sink->lock);</span><br><span style="color: hsl(0, 100%, 40%);">-   }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       AST_RWLIST_UNLOCK(&sinks);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  ast_channel_unref(dummy);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static int load_config(int reload)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-   struct ast_config *cfg;</span><br><span style="color: hsl(0, 100%, 40%);">- struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };</span><br><span style="color: hsl(0, 100%, 40%);">-     int default_facility = LOG_LOCAL4;</span><br><span style="color: hsl(0, 100%, 40%);">-      int default_priority = LOG_INFO;</span><br><span style="color: hsl(0, 100%, 40%);">-        const char *catg = NULL, *tmp;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  cfg = ast_config_load(CONFIG, config_flags);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (cfg == CONFIG_STATUS_FILEMISSING || cfg == CONFIG_STATUS_FILEINVALID) {</span><br><span style="color: hsl(0, 100%, 40%);">-             ast_log(AST_LOG_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                  "Unable to load %s. Not logging custom CSV CDRs to syslog.\n", CONFIG);</span><br><span style="color: hsl(0, 100%, 40%);">-               return -1;</span><br><span style="color: hsl(0, 100%, 40%);">-      } else if (cfg == CONFIG_STATUS_FILEUNCHANGED) {</span><br><span style="color: hsl(0, 100%, 40%);">-                return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (reload) {</span><br><span style="color: hsl(0, 100%, 40%);">-           free_config();</span><br><span style="color: hsl(0, 100%, 40%);">-  }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (!(ast_strlen_zero(tmp = ast_variable_retrieve(cfg, "general", "facility")))) {</span><br><span style="color: hsl(0, 100%, 40%);">-          int facility = ast_syslog_facility(tmp);</span><br><span style="color: hsl(0, 100%, 40%);">-                if (facility < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                  ast_log(AST_LOG_WARNING,</span><br><span style="color: hsl(0, 100%, 40%);">-                                "Invalid facility '%s' specified, defaulting to '%s'\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                              tmp, ast_syslog_facility_name(default_facility));</span><br><span style="color: hsl(0, 100%, 40%);">-               } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        default_facility = facility;</span><br><span style="color: hsl(0, 100%, 40%);">-            }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (!(ast_strlen_zero(tmp = ast_variable_retrieve(cfg, "general", "priority")))) {</span><br><span style="color: hsl(0, 100%, 40%);">-          int priority = ast_syslog_priority(tmp);</span><br><span style="color: hsl(0, 100%, 40%);">-                if (priority < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                  ast_log(AST_LOG_WARNING,</span><br><span style="color: hsl(0, 100%, 40%);">-                                "Invalid priority '%s' specified, defaulting to '%s'\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                              tmp, ast_syslog_priority_name(default_priority));</span><br><span style="color: hsl(0, 100%, 40%);">-               } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        default_priority = priority;</span><br><span style="color: hsl(0, 100%, 40%);">-            }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       while ((catg = ast_category_browse(cfg, catg))) {</span><br><span style="color: hsl(0, 100%, 40%);">-               struct cdr_syslog_config *sink;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-         if (!strcasecmp(catg, "general")) {</span><br><span style="color: hsl(0, 100%, 40%);">-                   continue;</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-               if (ast_strlen_zero(tmp = ast_variable_retrieve(cfg, catg, "template"))) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    ast_log(AST_LOG_WARNING,</span><br><span style="color: hsl(0, 100%, 40%);">-                                "No 'template' parameter found for '%s'.  Skipping.\n", catg);</span><br><span style="color: hsl(0, 100%, 40%);">-                        continue;</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-               sink = ast_calloc_with_stringfields(1, struct cdr_syslog_config, 1024);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-         if (!sink) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    ast_log(AST_LOG_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                          "Unable to allocate memory for configuration settings.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                   free_config();</span><br><span style="color: hsl(0, 100%, 40%);">-                  break;</span><br><span style="color: hsl(0, 100%, 40%);">-          }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-               ast_mutex_init(&sink->lock);</span><br><span style="color: hsl(0, 100%, 40%);">-             ast_string_field_set(sink, ident, catg);</span><br><span style="color: hsl(0, 100%, 40%);">-                ast_string_field_set(sink, format, tmp);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                if (ast_strlen_zero(tmp = ast_variable_retrieve(cfg, catg, "facility"))) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    sink->facility = default_facility;</span><br><span style="color: hsl(0, 100%, 40%);">-           } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        int facility = ast_syslog_facility(tmp);</span><br><span style="color: hsl(0, 100%, 40%);">-                        if (facility < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                          ast_log(AST_LOG_WARNING,</span><br><span style="color: hsl(0, 100%, 40%);">-                                        "Invalid facility '%s' specified for '%s,' defaulting to '%s'\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                                     tmp, catg, ast_syslog_facility_name(default_facility));</span><br><span style="color: hsl(0, 100%, 40%);">-                 } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                                sink->facility = facility;</span><br><span style="color: hsl(0, 100%, 40%);">-                   }</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-               if (ast_strlen_zero(tmp = ast_variable_retrieve(cfg, catg, "priority"))) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    sink->priority = default_priority;</span><br><span style="color: hsl(0, 100%, 40%);">-           } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        int priority = ast_syslog_priority(tmp);</span><br><span style="color: hsl(0, 100%, 40%);">-                        if (priority < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                          ast_log(AST_LOG_WARNING,</span><br><span style="color: hsl(0, 100%, 40%);">-                                        "Invalid priority '%s' specified for '%s,' defaulting to '%s'\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                                     tmp, catg, ast_syslog_priority_name(default_priority));</span><br><span style="color: hsl(0, 100%, 40%);">-                 } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                                sink->priority = priority;</span><br><span style="color: hsl(0, 100%, 40%);">-                   }</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-               AST_RWLIST_INSERT_TAIL(&sinks, sink, list);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       ast_config_destroy(cfg);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        return AST_RWLIST_EMPTY(&sinks) ? -1 : 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static int unload_module(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-   if (ast_cdr_unregister(name)) {</span><br><span style="color: hsl(0, 100%, 40%);">-         return -1;</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (AST_RWLIST_WRLOCK(&sinks)) {</span><br><span style="color: hsl(0, 100%, 40%);">-            ast_cdr_register(name, ast_module_info->description, syslog_log);</span><br><span style="color: hsl(0, 100%, 40%);">-            ast_log(AST_LOG_ERROR, "Unable to lock sink list.  Unload failed.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                return -1;</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       free_config();</span><br><span style="color: hsl(0, 100%, 40%);">-  AST_RWLIST_UNLOCK(&sinks);</span><br><span style="color: hsl(0, 100%, 40%);">-  return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static enum ast_module_load_result load_module(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- int res;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        if (AST_RWLIST_WRLOCK(&sinks)) {</span><br><span style="color: hsl(0, 100%, 40%);">-            ast_log(AST_LOG_ERROR, "Unable to lock sink list.  Load failed.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-          return AST_MODULE_LOAD_DECLINE;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       res = load_config(0);</span><br><span style="color: hsl(0, 100%, 40%);">-   AST_RWLIST_UNLOCK(&sinks);</span><br><span style="color: hsl(0, 100%, 40%);">-  if (res) {</span><br><span style="color: hsl(0, 100%, 40%);">-              return AST_MODULE_LOAD_DECLINE;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-       ast_cdr_register(name, ast_module_info->description, syslog_log);</span><br><span style="color: hsl(0, 100%, 40%);">-    return AST_MODULE_LOAD_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static int reload(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-        int res;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (AST_RWLIST_WRLOCK(&sinks)) {</span><br><span style="color: hsl(0, 100%, 40%);">-            ast_log(AST_LOG_ERROR, "Unable to lock sink list.  Load failed.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-          return AST_MODULE_LOAD_DECLINE;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if ((res = load_config(1))) {</span><br><span style="color: hsl(0, 100%, 40%);">-           free_config();</span><br><span style="color: hsl(0, 100%, 40%);">-  }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       AST_RWLIST_UNLOCK(&sinks);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  return res ? AST_MODULE_LOAD_DECLINE : AST_MODULE_LOAD_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Customizable syslog CDR Backend",</span><br><span style="color: hsl(0, 100%, 40%);">-  .support_level = AST_MODULE_SUPPORT_CORE,</span><br><span style="color: hsl(0, 100%, 40%);">-       .load = load_module,</span><br><span style="color: hsl(0, 100%, 40%);">-    .unload = unload_module,</span><br><span style="color: hsl(0, 100%, 40%);">-        .reload = reload,</span><br><span style="color: hsl(0, 100%, 40%);">-       .load_pri = AST_MODPRI_CDR_DRIVER,</span><br><span style="color: hsl(0, 100%, 40%);">-      .requires = "cdr",</span><br><span style="color: hsl(0, 100%, 40%);">-);</span><br><span>diff --git a/doc/UPGRADE-staging/cdr_syslog_removal.txt b/doc/UPGRADE-staging/cdr_syslog_removal.txt</span><br><span>new file mode 100644</span><br><span>index 0000000..17f88dd</span><br><span>--- /dev/null</span><br><span>+++ b/doc/UPGRADE-staging/cdr_syslog_removal.txt</span><br><span>@@ -0,0 +1,6 @@</span><br><span style="color: hsl(120, 100%, 40%);">+Subject: cdr_syslog</span><br><span style="color: hsl(120, 100%, 40%);">+Master-Only: True</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+This module was deprecated in Asterisk 16</span><br><span style="color: hsl(120, 100%, 40%);">+and is now being removed in accordance with</span><br><span style="color: hsl(120, 100%, 40%);">+the Asterisk Module Deprecation policy.</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/16310">change 16310</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/c/asterisk/+/16310"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ic8eb6a2100ad5bc3b48338a6d0a6cfa70ecbc50f </div>
<div style="display:none"> Gerrit-Change-Number: 16310 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Joshua Colp <jcolp@sangoma.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>