From ed0d083596bd22bf772433ac949f243dfc5fb28c Mon Sep 17 00:00:00 2001
From: Richard Mudgett <rmudgett@digium.com>
Date: Tue, 14 Jan 2014 21:46:50 +0000
Subject: [PATCH] string container: Remove unnecessary RAII_VAR usage and
 string object lock. ........

Merged revisions 405541 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@405542 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 main/strings.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/main/strings.c b/main/strings.c
index 6633d5982b..a65df39dac 100644
--- a/main/strings.c
+++ b/main/strings.c
@@ -177,19 +177,21 @@ struct ao2_container *ast_str_container_alloc_options(enum ao2_container_opts op
 
 int ast_str_container_add(struct ao2_container *str_container, const char *add)
 {
-	RAII_VAR(char *, ao2_add, ao2_alloc(strlen(add) + 1, NULL), ao2_cleanup);
+	char *ao2_add;
 
+	/* The ao2_add object is immutable so it doesn't need a lock of its own. */
+	ao2_add = ao2_alloc_options(strlen(add) + 1, NULL, AO2_ALLOC_OPT_LOCK_NOLOCK);
 	if (!ao2_add) {
 		return -1;
 	}
+	strcpy(ao2_add, add);/* Safe */
 
-	/* safe strcpy */
-	strcpy(ao2_add, add);
 	ao2_link(str_container, ao2_add);
+	ao2_ref(ao2_add, -1);
 	return 0;
 }
 
 void ast_str_container_remove(struct ao2_container *str_container, const char *remove)
 {
-	ao2_find(str_container, remove, OBJ_KEY | OBJ_NODATA | OBJ_UNLINK);
+	ao2_find(str_container, remove, OBJ_SEARCH_KEY | OBJ_NODATA | OBJ_UNLINK);
 }
-- 
GitLab