summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Mailman/MailList.py12
1 files changed, 10 insertions, 2 deletions
diff --git a/Mailman/MailList.py b/Mailman/MailList.py
index 0205319aa..9d0099653 100644
--- a/Mailman/MailList.py
+++ b/Mailman/MailList.py
@@ -70,8 +70,7 @@ class MailList(MailCommandHandler, HTMLFormatter, Deliverer, ListAdmin,
def __del__(self):
try:
- for f in self._log_files.values():
- f.close()
+ self.CloseLogs()
except AttributeError:
# List didn't get far enough to have _log_files
pass
@@ -855,6 +854,15 @@ class MailList(MailCommandHandler, HTMLFormatter, Deliverer, ListAdmin,
logf.write(msg % args + '\n')
logf.flush()
+ def CloseLogs(self):
+ """Close all of this list's open log files.
+
+ Useful to avoid 'Too many open files' errors when iterating over
+ lots of lists."""
+ for kind, logger in self._log_files.items():
+ del self._log_files[kind]
+ logger.close()
+
def CheckVersion(self, stored_state):
"""Migrate prior version's state to new structure, if changed."""
if (self.data_version >= mm_cfg.DATA_FILE_VERSION and