[svn-commits] dvossel: trunk r299135 - in /trunk: include/asterisk/astobj2.h main/astobj2.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Mon Dec 20 18:03:13 UTC 2010


Author: dvossel
Date: Mon Dec 20 12:03:09 2010
New Revision: 299135

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=299135
Log:
New astobj2 flag for issuing a callback without locking the container.

Modified:
    trunk/include/asterisk/astobj2.h
    trunk/main/astobj2.c

Modified: trunk/include/asterisk/astobj2.h
URL: http://svnview.digium.com/svn/asterisk/trunk/include/asterisk/astobj2.h?view=diff&rev=299135&r1=299134&r2=299135
==============================================================================
--- trunk/include/asterisk/astobj2.h (original)
+++ trunk/include/asterisk/astobj2.h Mon Dec 20 12:03:09 2010
@@ -674,6 +674,12 @@
 	 * the hash value on the argument.
 	 */
 	OBJ_CONTINUE     = (1 << 4),
+	/*! 
+	 * \brief By using this flag, the ao2_container being searched will _NOT_
+	 * be locked.  Only use this flag if the ao2_container is being protected
+	 * by another mechanism other that the internal ao2_lock.
+	 */
+	OBJ_NOLOCK     = (1 << 5),
 };
 
 /*!

Modified: trunk/main/astobj2.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/astobj2.c?view=diff&rev=299135&r1=299134&r2=299135
==============================================================================
--- trunk/main/astobj2.c (original)
+++ trunk/main/astobj2.c Mon Dec 20 12:03:09 2010
@@ -654,7 +654,10 @@
 		last = i + 1;
 	}
 
-	ao2_lock(c);	/* avoid modifications to the content */
+
+	if (!(flags & OBJ_NOLOCK)) {
+		ao2_lock(c);	/* avoid modifications to the content */
+	}
 
 	for (; i < last ; i++) {
 		/* scan the list with prev-cur pointers */
@@ -738,7 +741,10 @@
 			last = start;
 		}
 	}
-	ao2_unlock(c);
+
+	if (!(flags & OBJ_NOLOCK)) {
+		ao2_unlock(c);
+	}
 
 	/* if multi_container was created, we are returning multiple objects */
 	if (multi_container != NULL) {




More information about the svn-commits mailing list