summaryrefslogtreecommitdiff
path: root/Mailman/MailList.py
diff options
context:
space:
mode:
Diffstat (limited to 'Mailman/MailList.py')
-rw-r--r--Mailman/MailList.py27
1 files changed, 17 insertions, 10 deletions
diff --git a/Mailman/MailList.py b/Mailman/MailList.py
index 69fb500a9..6c9c7fb20 100644
--- a/Mailman/MailList.py
+++ b/Mailman/MailList.py
@@ -535,18 +535,25 @@ class MailList(MailCommandHandler, HTMLFormatter, Deliverer, ListAdmin,
# Sanity checks
#
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
- type(self.data_version) == type(mm_cfg.DATA_FILE_VERSION)):
+ """Auto-update schema if necessary."""
+ if self.data_version >= mm_cfg.DATA_FILE_VERSION:
return
else:
- self.InitVars() # Init any new variables,
- self.Load(check_version = 0) # then reload the file
- from versions import Update
- Update(self, stored_state)
- self.data_version = mm_cfg.DATA_FILE_VERSION
- if self.Locked():
- self.Save()
+ # Initialize any new variables
+ self.InitVars()
+ # Then reload the database (but don't recurse)
+ self.Load(check_version=0)
+ # We must hold the list lock in order to update the schema
+ waslocked = self.Locked()
+ self.Lock()
+ try:
+ from versions import Update
+ Update(self, stored_state)
+ self.data_version = mm_cfg.DATA_FILE_VERSION
+ self.Save()
+ finally:
+ if not waslocked:
+ self.Unlock()
def CheckValues(self):
"""Normalize selected values to known formats."""