Merge "codecs: Add support for WebRTC iLBC 2.0."
authorJoshua Colp <jcolp@digium.com>
Tue, 13 Feb 2018 12:37:35 +0000 (06:37 -0600)
committerGerrit Code Review <gerrit2@gerrit.digium.api>
Tue, 13 Feb 2018 12:37:35 +0000 (06:37 -0600)
contrib/scripts/install_prereq
main/backtrace.c
main/cdr.c

index 19da358..367a9a9 100755 (executable)
@@ -19,7 +19,7 @@ usage() {
 }
 
 # Basic build system:
-PACKAGES_DEBIAN="build-essential"
+PACKAGES_DEBIAN="build-essential pkg-config"
 # Asterisk: basic requirements:
 PACKAGES_DEBIAN="$PACKAGES_DEBIAN libedit-dev libjansson-dev libsqlite3-dev uuid-dev libxml2-dev"
 # Asterisk: for addons:
index aed4ffd..7dfcfc3 100644 (file)
@@ -130,7 +130,7 @@ char **__ast_bt_get_symbols(void **addresses, size_t num_frames)
                        }
 
                        for (section = bfdobj->sections; section; section = section->next) {
-                               if (!bfd_get_section_flags(bfdobj, section) & SEC_ALLOC ||
+                               if (!(bfd_get_section_flags(bfdobj, section) & SEC_ALLOC) ||
                                        section->vma > offset ||
                                        section->size + section->vma < offset) {
                                        continue;
index 8acae60..4acadf9 100644 (file)
@@ -371,7 +371,7 @@ static ast_cond_t cdr_pending_cond;
 /*! \brief A container of the active master CDRs indexed by Party A channel uniqueid */
 static struct ao2_container *active_cdrs_master;
 
-/*! \brief A container of all active CDRs indexed by Party B channel name */
+/*! \brief A container of all active CDRs with a Party B indexed by Party B channel name */
 static struct ao2_container *active_cdrs_all;
 
 /*! \brief Message router for stasis messages regarding channel state */
@@ -971,13 +971,21 @@ static void cdr_all_unlink(struct cdr_object *cdr)
 
        ast_assert(cdr->is_root);
 
+       /* Hold a ref to the root CDR to ensure the list members don't go away on us. */
+       ao2_ref(cdr, +1);
        ao2_lock(active_cdrs_all);
-       for (cur = cdr->next; cur; cur = next) {
+       for (cur = cdr; cur; cur = next) {
                next = cur->next;
                ao2_unlink_flags(active_cdrs_all, cur, OBJ_NOLOCK);
+               /*
+                * It is safe to still use cur after unlinking because the
+                * root CDR holds a ref to all the CDRs in the list and we
+                * have a ref to the root CDR.
+                */
                ast_string_field_set(cur, party_b_name, "");
        }
        ao2_unlock(active_cdrs_all);
+       ao2_ref(cdr, -1);
 }
 
 /*!