diff options
Diffstat (limited to 'Mailman/MailList.py')
| -rw-r--r-- | Mailman/MailList.py | 27 |
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.""" |
