[asterisk-commits] rmudgett: branch rmudgett/ao2_enhancements r370741 - /team/rmudgett/ao2_enhan...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Aug 2 11:08:42 CDT 2012


Author: rmudgett
Date: Thu Aug  2 11:08:39 2012
New Revision: 370741

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=370741
Log:
* Assert that the hash container becomes empty when destroying it.

* Change the reg_containers container to replace duplicates instead of
rejecting them.  You can now re-register the same name with new
containers instead of unregistering the old one first.

* Clean up some comments.

Modified:
    team/rmudgett/ao2_enhancements/main/astobj2.c

Modified: team/rmudgett/ao2_enhancements/main/astobj2.c
URL: http://svnview.digium.com/svn/asterisk/team/rmudgett/ao2_enhancements/main/astobj2.c?view=diff&rev=370741&r1=370740&r2=370741
==============================================================================
--- team/rmudgett/ao2_enhancements/main/astobj2.c (original)
+++ team/rmudgett/ao2_enhancements/main/astobj2.c Thu Aug  2 11:08:39 2012
@@ -1378,7 +1378,6 @@
 /*!
  * A structure to create a linked list of entries,
  * used within a bucket.
- * XXX \todo this should be private to the container code
  */
 struct hash_bucket_node {
 	/*! Next node links in the list. */
@@ -2052,6 +2051,20 @@
 		}
 	}
 
+#if defined(AST_DEVMODE)
+	if (self->common.destroying) {
+		/* Check that the container no longer has any nodes */
+		for (i = self->n_buckets; i--;) {
+			if (!AST_DLLIST_EMPTY(&self->buckets[i].list)) {
+				ast_log(LOG_ERROR,
+					"Ref leak destroying container.  Container still has nodes!\n");
+				ast_assert(0);
+				break;
+			}
+		}
+	}
+#endif	/* defined(AST_DEVMODE) */
+
 	if (flags & OBJ_NOLOCK) {
 		adjust_lock(self, orig_lock, 0);
 	} else {
@@ -2306,8 +2319,6 @@
 	unsigned int container_options, unsigned int n_buckets, ao2_hash_fn *hash_fn,
 	ao2_sort_fn *sort_fn, ao2_callback_fn *cmp_fn)
 {
-	/* XXX maybe consistency check on arguments ? */
-	/* compute the container size */
 	unsigned int num_buckets;
 	size_t container_size;
 	struct ao2_container_hash *self;
@@ -2325,8 +2336,6 @@
 	ao2_sort_fn *sort_fn, ao2_callback_fn *cmp_fn,
 	const char *tag, const char *file, int line, const char *func, int ref_debug)
 {
-	/* XXX maybe consistency check on arguments ? */
-	/* compute the container size */
 	unsigned int num_buckets;
 	size_t container_size;
 	struct ao2_container_hash *self;
@@ -2741,7 +2750,7 @@
 {
 #if defined(AST_DEVMODE)
 	reg_containers = ao2_container_alloc_list(AO2_ALLOC_OPT_LOCK_RWLOCK,
-		AO2_CONTAINER_ALLOC_OPT_DUPS_REJECT, ao2_reg_sort_cb, NULL);
+		AO2_CONTAINER_ALLOC_OPT_DUPS_REPLACE, ao2_reg_sort_cb, NULL);
 #endif	/* defined(AST_DEVMODE) */
 #if defined(AO2_DEBUG) || defined(AST_DEVMODE)
 	ast_cli_register_multiple(cli_astobj2, ARRAY_LEN(cli_astobj2));




More information about the asterisk-commits mailing list