There's a small bug in 2.1alpha4 in updating a list's database to the DATA_FILE_VERSION, causing "nomail" settings to not be propagated forward:
MailList.CheckVersion() reloads the database, taking care to make sure that the reload doesn't trigger a recursive call to CheckVersion(). But if the list wasn't locked, CheckVersion() then calls Lock(), and Lock() calls Load() again, this time generating a recursive call to CheckVersion(). This recursion is only one deep because now the list is locked, but even that is too much for versions.CanonicalizeUserOptions() since it clears the old-style "nomail" flag after setting the delivery status in the new database.
Here's a patch that fixes this.
-les
*** MailList.py.orig Sun Jan 6 23:04:01 2002 --- MailList.py Sat Feb 9 22:42:36 2002
*** 146,157 **** # # Lock management # ! def Lock(self, timeout=0): self.__lock.lock(timeout) # Must reload our database for consistency. Watch out for lists that # don't exist. try: ! self.Load() except Exception: self.Unlock() raise --- 146,157 ---- # # Lock management # ! def Lock(self, timeout=0, check_version=1): self.__lock.lock(timeout) # Must reload our database for consistency. Watch out for lists that # don't exist. try: ! self.Load(check_version) except Exception: self.Unlock() raise
*** 557,563 **** # We must hold the list lock in order to update the schema waslocked = self.Locked() if not waslocked: ! self.Lock() try: from versions import Update Update(self, stored_state) --- 558,564 ---- # We must hold the list lock in order to update the schema waslocked = self.Locked() if not waslocked: ! self.Lock(check_version=0) try: from versions import Update Update(self, stored_state)