Просмотр исходного кода

LOG: handle closing unused logfiles better

This fixes a bug where having a second log file will close
the previous one.

Signed-off-by: Angus Salkeld <asalkeld@redhat.com>
Reviewed-by: Fabio M. Di Nitto <fdinitto@redhat.com>
Angus Salkeld 13 лет назад
Родитель
Сommit
e6b35bdb7a
1 измененных файлов с 19 добавлено и 7 удалено
  1. 19 7
      exec/logsys.c

+ 19 - 7
exec/logsys.c

@@ -149,11 +149,14 @@ static int logsys_config_file_set_unlocked (
 	char file_format[128];
 	char file_format[128];
 
 
 	if (logsys_loggers[subsysid].target_id > 0) {
 	if (logsys_loggers[subsysid].target_id > 0) {
-		/* TODO close file
-		logsys_filter_apply(subsysid,
-				    QB_LOG_FILTER_REMOVE,
-				    logsys_loggers[subsysid].target_id);
-		*/
+		int32_t f;
+		for (f = 0; f < logsys_loggers[subsysid].file_idx; f++) {
+			qb_log_filter_ctl(logsys_loggers[subsysid].target_id,
+				QB_LOG_FILTER_REMOVE,
+				QB_LOG_FILTER_FILE,
+				logsys_loggers[subsysid].files[f],
+				LOG_TRACE);
+		}
 	}
 	}
 
 
 	logsys_loggers[subsysid].dirty = QB_TRUE;
 	logsys_loggers[subsysid].dirty = QB_TRUE;
@@ -192,8 +195,17 @@ static int logsys_config_file_set_unlocked (
 	}
 	}
 
 
 	if (logsys_loggers[subsysid].target_id > 0) {
 	if (logsys_loggers[subsysid].target_id > 0) {
-		/* no one else is using this close it */
-		qb_log_file_close(logsys_loggers[subsysid].target_id);
+		int num_using_current = 0;
+		for (i = 0; i <= LOGSYS_MAX_SUBSYS_COUNT; i++) {
+			if (logsys_loggers[subsysid].target_id ==
+				logsys_loggers[i].target_id) {
+				num_using_current++;
+			}
+		}
+		if (num_using_current == 1) {
+			/* no one else is using this close it */
+			qb_log_file_close(logsys_loggers[subsysid].target_id);
+		}
 	}
 	}
 
 
 	logsys_loggers[subsysid].target_id = qb_log_file_open(file);
 	logsys_loggers[subsysid].target_id = qb_log_file_open(file);