diff options
| author | bwarsaw | 2001-10-22 19:20:37 +0000 |
|---|---|---|
| committer | bwarsaw | 2001-10-22 19:20:37 +0000 |
| commit | 4f25e7cf49ef5b95f885f84febaf4e1825f8bb04 (patch) | |
| tree | 62931a190076b996ad458a05605993758deb816b /Mailman/MailList.py | |
| parent | aadb10fc7e2fc6b4efba289291a6a6d381be5e29 (diff) | |
| download | mailman-4f25e7cf49ef5b95f885f84febaf4e1825f8bb04.tar.gz mailman-4f25e7cf49ef5b95f885f84febaf4e1825f8bb04.tar.zst mailman-4f25e7cf49ef5b95f885f84febaf4e1825f8bb04.zip | |
CheckVersion(): The list must be locked in order to auto-update the
schemas.
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.""" |
