All pastes #1469980 Raw Edit

clueless

public text v1 · immutable
#1469980 ·published 2009-06-22 15:59 UTC
rendered paste body
Index: cel/cel_sqlite3_custom.c===================================================================--- cel/cel_sqlite3_custom.c	(revision 202413)+++ cel/cel_sqlite3_custom.c	(working copy)@@ -75,7 +75,7 @@  static AST_LIST_HEAD_STATIC(sql_values, values); -static int free_config(void);+static void free_config(void);  static int load_column_config(const char *tmp) {@@ -172,11 +172,8 @@ 		free_config(); 	} -	ast_mutex_lock(&lock);- 	if (!(mappingvar = ast_variable_browse(cfg, "master"))) { 		/* Nothing configured */-		ast_mutex_unlock(&lock); 		ast_config_destroy(cfg); 		return -1; 	}@@ -191,7 +188,6 @@  	/* Columns */ 	if (load_column_config(ast_variable_retrieve(cfg, "master", "columns"))) {-		ast_mutex_unlock(&lock); 		ast_config_destroy(cfg); 		free_config(); 		return -1;@@ -199,7 +195,6 @@  	/* Values */ 	if (load_values_config(ast_variable_retrieve(cfg, "master", "values"))) {-		ast_mutex_unlock(&lock); 		ast_config_destroy(cfg); 		free_config(); 		return -1;@@ -207,18 +202,15 @@  	ast_verb(3, "Logging CEL records to table '%s' in 'master.db'\n", table); -	ast_mutex_unlock(&lock); 	ast_config_destroy(cfg);  	return 0; } -static int free_config(void)+static void free_config(void) { 	struct values *value; -	ast_mutex_lock(&lock);- 	if (db) { 		sqlite3_close(db); 		db = NULL;@@ -232,10 +224,6 @@ 	while ((value = AST_LIST_REMOVE_HEAD(&sql_values, list))) { 		ast_free(value); 	}--	ast_mutex_unlock(&lock);--	return 0; }  static void sqlite3_log(const struct ast_event *event, void *userdata)@@ -249,6 +237,8 @@ 		return; 	} +	ast_mutex_lock(&lock);+ 	{ /* Make it obvious that only sql should be used outside of this block */ 		char *escaped; 		char subst_buf[2048];@@ -260,6 +250,7 @@ 		if (!dummy) { 			ast_log(LOG_ERROR, "Unable to fabricate channel from CEL event.\n"); 			ast_free(value_string);+			ast_mutex_unlock(&lock); 			return; 		} 		AST_LIST_TRAVERSE(&sql_values, value, list) {@@ -274,8 +265,6 @@ 		ast_free(value_string); 	} -	ast_mutex_lock(&lock);- 	/* XXX This seems awful arbitrary... */ 	for (count = 0; count < 5; count++) { 		int res = sqlite3_exec(db, sql, NULL, NULL, &error);@@ -301,12 +290,12 @@  static int unload_module(void) {-	free_config();- 	if (event_sub) { 		event_sub = ast_event_unsubscribe(event_sub); 	} +	free_config();+ 	return 0; } @@ -317,14 +306,7 @@ 	int res; 	char *sql; -	if (!load_config(0)) {-		event_sub = ast_event_subscribe(AST_EVENT_CEL, sqlite3_log, "CEL sqlite3 custom backend", NULL, AST_EVENT_IE_END);-		if (!event_sub) {-			ast_log(LOG_ERROR, "Unable to register custom SQLite3 CEL handling\n");-			free_config();-			return AST_MODULE_LOAD_DECLINE;-		}-	} else {+	if (load_config(0)) { 		return AST_MODULE_LOAD_DECLINE; 	} @@ -354,12 +336,25 @@ 		} 	} +	event_sub = ast_event_subscribe(AST_EVENT_CEL, sqlite3_log, "CEL sqlite3 custom backend", NULL, AST_EVENT_IE_END);+	if (!event_sub) {+		ast_log(LOG_ERROR, "Unable to register custom SQLite3 CEL handling\n");+		free_config();+		return AST_MODULE_LOAD_DECLINE;+	}+ 	return AST_MODULE_LOAD_SUCCESS; }  static int reload(void) {-	return load_config(1);+	int res = 0;++	ast_mutex_lock(&lock);+	res = load_config(1);+	ast_mutex_lock(&lock);++	return res; }  AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "SQLite3 Custom CEL Module",