[asterisk-commits] file: trunk r81290 - /trunk/main/logger.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Aug 28 16:35:20 CDT 2007


Author: file
Date: Tue Aug 28 16:35:20 2007
New Revision: 81290

URL: http://svn.digium.com/view/asterisk?view=rev&rev=81290
Log:
Add some read/write locking magic to make logger reload operate again.

Modified:
    trunk/main/logger.c

Modified: trunk/main/logger.c
URL: http://svn.digium.com/view/asterisk/trunk/main/logger.c?view=diff&rev=81290&r1=81289&r2=81290
==============================================================================
--- trunk/main/logger.c (original)
+++ trunk/main/logger.c Tue Aug 28 16:35:20 2007
@@ -315,7 +315,7 @@
 	return chan;
 }
 
-static void init_logger_chain(int reload)
+static void init_logger_chain(int reload, int locked)
 {
 	struct logchannel *chan;
 	struct ast_config *cfg;
@@ -327,10 +327,12 @@
 		return;
 
 	/* delete our list of log channels */
-	AST_RWLIST_WRLOCK(&logchannels);
+	if (!locked)
+		AST_RWLIST_WRLOCK(&logchannels);
 	while ((chan = AST_RWLIST_REMOVE_HEAD(&logchannels, list)))
 		free(chan);
-	AST_RWLIST_UNLOCK(&logchannels);
+	if (!locked)
+		AST_RWLIST_UNLOCK(&logchannels);
 	
 	global_logmask = 0;
 	errno = 0;
@@ -347,9 +349,11 @@
 			return;
 		chan->type = LOGTYPE_CONSOLE;
 		chan->logmask = 28; /*warning,notice,error */
-		AST_RWLIST_WRLOCK(&logchannels);
+		if (!locked)
+			AST_RWLIST_WRLOCK(&logchannels);
 		AST_RWLIST_INSERT_HEAD(&logchannels, chan, list);
-		AST_RWLIST_UNLOCK(&logchannels);
+		if (!locked)
+			AST_RWLIST_UNLOCK(&logchannels);
 		global_logmask |= chan->logmask;
 		return;
 	}
@@ -392,7 +396,8 @@
 		}
 	}
 
-	AST_RWLIST_WRLOCK(&logchannels);
+	if (!locked)
+		AST_RWLIST_WRLOCK(&logchannels);
 	var = ast_variable_browse(cfg, "logfiles");
 	for (; var; var = var->next) {
 		if (!(chan = make_logchannel(var->name, var->value, var->lineno)))
@@ -400,7 +405,8 @@
 		AST_RWLIST_INSERT_HEAD(&logchannels, chan, list);
 		global_logmask |= chan->logmask;
 	}
-	AST_RWLIST_UNLOCK(&logchannels);
+	if (!locked)
+		AST_RWLIST_UNLOCK(&logchannels);
 
 	ast_config_destroy(cfg);
 }
@@ -568,7 +574,7 @@
 
 	filesize_reload_needed = 0;
 
-	init_logger_chain(1);
+	init_logger_chain(1, 1);
 
 	if (logfiles.event_log) {
 		snprintf(old, sizeof(old), "%s/%s", ast_config_AST_LOG_DIR, EVENTLOG);
@@ -593,7 +599,9 @@
 
 		qlog = fopen(old, "a");
 		if (qlog) {
+			AST_RWLIST_UNLOCK(&logchannels);
 			ast_queue_log("NONE", "NONE", "NONE", "CONFIGRELOAD", "%s", "");
+			AST_RWLIST_WRLOCK(&logchannels);
 			ast_log(LOG_EVENT, "Restarted Asterisk Queue Logger\n");
 			if (option_verbose)
 				ast_verbose("Asterisk Queue Logger restarted\n");
@@ -886,7 +894,7 @@
 	ast_mkdir(ast_config_AST_LOG_DIR, 0777);
   
 	/* create log channels */
-	init_logger_chain(0);
+	init_logger_chain(0, 0);
 
 	/* create the eventlog */
 	if (logfiles.event_log) {




More information about the asterisk-commits mailing list