[asterisk-commits] juggie: branch juggie/NoLossCDR r84114 - /team/juggie/NoLossCDR/main/cdr.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Sep 28 18:31:19 CDT 2007


Author: juggie
Date: Fri Sep 28 18:31:19 2007
New Revision: 84114

URL: http://svn.digium.com/view/asterisk?view=rev&rev=84114
Log:
add in support for max queue size

Modified:
    team/juggie/NoLossCDR/main/cdr.c

Modified: team/juggie/NoLossCDR/main/cdr.c
URL: http://svn.digium.com/view/asterisk/team/juggie/NoLossCDR/main/cdr.c?view=diff&rev=84114&r1=84113&r2=84114
==============================================================================
--- team/juggie/NoLossCDR/main/cdr.c (original)
+++ team/juggie/NoLossCDR/main/cdr.c Fri Sep 28 18:31:19 2007
@@ -715,7 +715,7 @@
 	ast_set_flag(cdr, AST_CDR_FLAG_POSTED);
 	if (ast_test_flag(cdr, AST_CDR_FLAG_POST_DISABLED))
 		return;
-	/* add a ref to make sure we dont have a weird race condition */
+	/* add a ref to make sure we dont have a race condition */
 	ast_atomic_fetchadd_int(&cdr->usecount, +1);
 	AST_RWLIST_RDLOCK(&be_list);
 	AST_RWLIST_TRAVERSE(&be_list, i, list) {
@@ -725,12 +725,14 @@
 		ast_atomic_fetchadd_int(&cdr->usecount, +1);
 		/* increment cdr counter for this queue */
 		ast_atomic_fetchadd_int(&i->waiting_cdrs, +1);
+		/* if we hit our max number of records, delete the oldest one */
+		if (i->waiting_cdrs > queuesize)
+			AST_LIST_REMOVE_HEAD(&i->cdr_queue, list);
 		AST_LIST_INSERT_TAIL(&i->cdr_queue, cdr, list);
 		ast_cond_signal(&i->cdr_pending_cond);
 		AST_LIST_UNLOCK(&i->cdr_queue);
 	}
 	AST_RWLIST_UNLOCK(&be_list);
-	ast_atomic_fetchadd_int(&cdr->usecount, -1);
 	if (ast_atomic_fetchadd_int(&cdr->usecount, -1) == 1) {
 		ast_debug(1, "cdr record no longer in any queue, so lets free it\n");
 		ast_cdr_free(cdr);




More information about the asterisk-commits mailing list