[asterisk-commits] kmoore: branch kmoore/stasis-http_sounds r390393 - /team/kmoore/stasis-http_s...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Jun 4 09:17:21 CDT 2013


Author: kmoore
Date: Tue Jun  4 09:17:19 2013
New Revision: 390393

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=390393
Log:
Prevent multiple reloads from occurring simultaneously and handle media index failures better

Modified:
    team/kmoore/stasis-http_sounds/main/sounds_index.c

Modified: team/kmoore/stasis-http_sounds/main/sounds_index.c
URL: http://svnview.digium.com/svn/asterisk/team/kmoore/stasis-http_sounds/main/sounds_index.c?view=diff&rev=390393&r1=390392&r2=390393
==============================================================================
--- team/kmoore/stasis-http_sounds/main/sounds_index.c (original)
+++ team/kmoore/stasis-http_sounds/main/sounds_index.c Tue Jun  4 09:17:19 2013
@@ -103,16 +103,26 @@
 	struct ast_media_index *index = arg;
 
 	if (ast_media_index_update(index, lang)) {
-		return CMP_STOP;
-	}
-	return 0;
-}
+		return CMP_MATCH;
+	}
+	return 0;
+}
+
+AST_MUTEX_DEFINE_STATIC(reload_lock);
 
 int ast_sounds_reindex(void)
 {
-	RAII_VAR(struct ao2_container *, languages, get_languages(), ao2_cleanup);
-	struct ast_media_index *new_index, *old_index = sounds_index;
-	RAII_VAR(struct ast_str *, sounds_dir, ast_str_create(64), ast_free);
+	RAII_VAR(struct ast_str *, sounds_dir, NULL, ast_free);
+	RAII_VAR(struct ao2_container *, languages, NULL, ao2_cleanup);
+	RAII_VAR(char *, failed_index, NULL, ao2_cleanup);
+	RAII_VAR(struct ast_media_index *, new_index, NULL, ao2_cleanup);
+	struct ast_media_index *old_index;
+
+	SCOPED_MUTEX(lock, &reload_lock);
+
+	old_index = sounds_index;
+	languages = get_languages();
+	sounds_dir = ast_str_create(64);
 
 	if (!languages || !sounds_dir) {
 		return -1;
@@ -124,7 +134,12 @@
 		return -1;
 	}
 
-	ao2_callback(languages, OBJ_NODATA, update_index_cb, new_index);
+	failed_index = ao2_callback(languages, 0, update_index_cb, new_index);
+	if (failed_index) {
+		return -1;
+	}
+
+	ao2_ref(new_index, +1);
 	sounds_index = new_index;
 	ao2_cleanup(old_index);
 	return 0;




More information about the asterisk-commits mailing list