Mailing list archives: November 2003

Site index · List index
Message listThread · Author · Date
r.@gosympatico.ca> timer.cancel() # XXX this can hang on exit </span><span class="add">+ self.timer.cancel() </span><span class="cx"> del self._password </span><span class="rem">- del self.timer - </span><span class="add">+ del self.timer + + def _clear(self): + d = self.clearMasterPassword() + d.addCallback(lambda: True) + </span><span class="cx"> def _setTimedPassword(self, password, timeout): </span><span class="add">+ if hasattr(self, 'timer'): + self.timer.cancel() </span><span class="cx"> self._password = password </span><span class="rem">- self.timer = threading.Timer(timeout, self.clearMasterPassword) - - # XXX Other threads can exit without waiting for this; seems to solve shutdown hang. - # XXX However, this leads to a shutdown crash about 50% of the time (for some reason still successful exit value): - #Exception in thread Thread-1 (most likely raised during interpreter shutdown): - #Traceback (most recent call last): - # File ".../release/lib/python2.5/threading.py", line 460, in __bootstrap - # File ".../release/lib/python2.5/threading.py", line 623, in run - # File ".../release/lib/python2.5/threading.py", line 364, in wait - # File ".../release/lib/python2.5/threading.py", line 229, in wait - #<type 'exceptions.TypeError'>: 'NoneType' object is not callable - self.timer.setDaemon(True) - </span><span class="add">+ self.timer = threading.Timer(timeout, self._clear) + #self.timer.setDaemon(True) # Exception in thread Thread-1 (most likely raised during interpreter shutdown) </span><span class="cx"> self.timer.start() def _change(self, oldMaster, newMaster, view, prefs): </span><span class="lines">@@ -188,14 +192,14 @@ </span><span class="cx"> again = False for item in password.Password.iterItems(view): try: </span><span class="rem">- oldPassword = item.decryptPassword(masterPassword=oldMaster) # safe: supplying master password </span><span class="add">+ oldPassword = waitForDeferred(item.decryptPassword(masterPassword=oldMaster)) </span><span class="cx"> except password.UninitializedPassword: continue except password.DecryptionError: log.exception('Wrong old master password?') again = True break </span><span class="rem">- item.encryptPassword(oldPassword, masterPassword=newMaster) # safe: supplying master password </span><span class="add">+ waitForDeferred(item.encryptPassword(oldPassword, masterPassword=newMaster)) </span><span class="cx"> if again: return False </span><span class="lines">@@ -212,6 +216,7 @@ </span><span class="cx"> return True </span><span class="add">+ @runInUIThread </span><span class="cx"> def changeMasterPassword(self, view, window=None): """ Change or set the master password. </span><span class="lines">@@ -516,7 +521,7 @@ </span><squot;> # the crypto algorithms are unicode unfriendly if isinstance(password, unicode): </span><span class="lines">@@ -178,6 +192,7 @@ </span><span class="cx"> # encrypt using AES (Rijndael) self.ciphertext = _encrypt(plaintext, encKey, self.iv) </span><span class="add">+ @runInUIThread </span><span class="cx"> def clear(self): try: del self.ciphertext </span><span class="lines">@@ -227,6 +242,6 @@ </span><span class="cx"> password = ''.join([string.printable[ord(c) % len(string.printable)] \ for c in os.urandom(16)]) </span><span class="rem">- dummyPassword.encryptPassword(password, masterPassword='') # safe: supplying master password </span><span class="add">+ waitForrem">- <preclass="diff"><spanclass="info">---trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)</span><spanclass="lines">@@-2,7+2,7@@</span><spanclass="cx">//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell</span><spanclass="rem">-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$</span><spanclass="add">+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$</span><spanclass="cx">//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////</span><spanclass="lines">@@-1177,7+1177,7@@</span><spanclass="cx">stringTestId::MakeId(){m_seed=(m_seed*171)%30269;</span><spanclass="rem">-returnwxString::Format(_T("%-6d"),m_seed).mb_str();</span><spanclass="add"&amp #i import hexlify, unhexlify </span><span class="lines">@@ -35,7 +47,7 @@ </span><span class="cx"> from application import schema from util imprandom(16)]) &516,7 +521,7 @@ </span><span class="cx"> # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Tue, 22 Feb, 04:55
r.@gosympatico.ca> timer.cancel() # XXX this can hang on exit </span><span class="add">+ self.timer.cancel() </span><span class="cx"> del self._password </span><span class="rem">- del self.timer - </span><span class="add">+ del self.timer + + def _clear(self): + d = self.clearMasterPassword() + d.addCallback(lambda: True) + </span><span class="cx"> def _setTimedPassword(self, password, timeout): </span><span class="add">+ if hasattr(self, 'timer'): + self.timer.cancel() </span><span class="cx"> self._password = password </span><span class="rem">- self.timer = threading.Timer(timeout, self.clearMasterPassword) - - # XXX Other threads can exit without waiting for this; seems to solve shutdown hang. - # XXX However, this leads to a shutdown crash about 50% of the time (for some reason still successful exit value): - #Exception in thread Thread-1 (most likely raised during interpreter shutdown): - #Traceback (most recent call last): - # File ".../release/lib/python2.5/threading.py", line 460, in __bootstrap - # File ".../release/lib/python2.5/threading.py", line 623, in run - # File ".../release/lib/python2.5/threading.py", line 364, in wait - # File ".../release/lib/python2.5/threading.py", line 229, in wait - #<type 'exceptions.TypeError'>: 'NoneType' object is not callable - self.timer.setDaemon(True) - </span><span class="add">+ self.timer = threading.Timer(timeout, self._clear) + #self.timer.setDaemon(True) # Exception in thread Thread-1 (most likely raised during interpreter shutdown) </span><span class="cx"> self.timer.start() def _change(self, oldMaster, newMaster, view, prefs): </span><span class="lines">@@ -188,14 +192,14 @@ </span><span class="cx"> again = False for item in password.Password.iterItems(view): try: </span><span class="rem">- oldPassword = item.decryptPassword(masterPassword=oldMaster) # safe: supplying master password </span><span class="add">+ oldPassword = waitForDeferred(item.decryptPassword(masterPassword=oldMaster)) </span><span class="cx"> except password.UninitializedPassword: continue except password.DecryptionError: log.exception('Wrong old master password?') again = True break </span><span class="rem">- item.encryptPassword(oldPassword, masterPassword=newMaster) # safe: supplying master password </span><span class="add">+ waitForDeferred(item.encryptPassword(oldPassword, masterPassword=newMaster)) </span><span class="cx"> if again: return False </span><span class="lines">@@ -212,6 +216,7 @@ </span><span class="cx"> return True </span><span class="add">+ @runInUIThread </span><span class="cx"> def changeMasterPassword(self, view, window=None): """ Change or set the master password. </span><span class="lines">@@ -516,7 +521,7 @@ </span><squot;> # the crypto algorithms are unicode unfriendly if isinstance(password, unicode): </span><span class="lines">@@ -178,6 +192,7 @@ </span><span class="cx"> # encrypt using AES (Rijndael) self.ciphertext = _encrypt(plaintext, encKey, self.iv) </span><span class="add">+ @runInUIThread </span><span class="cx"> def clear(self): try: del self.ciphertext </span><span class="lines">@@ -227,6 +242,6 @@ </span><span class="cx"> password = ''.join([string.printable[ord(c) % len(string.printable)] \ for c in os.urandom(16)]) </span><span class="rem">- dummyPassword.encryptPassword(password, masterPassword='') # safe: supplying master password </span><span class="add">+ waitForrem">- <preclass="diff"><spanclass="info">---trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)</span><spanclass="lines">@@-2,7+2,7@@</span><spanclass="cx">//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell</span><spanclass="rem">-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$</span><spanclass="add">+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$</span><spanclass="cx">//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////</span><spanclass="lines">@@-1177,7+1177,7@@</span><spanclass="cx">stringTestId::MakeId(){m_seed=(m_seed*171)%30269;</span><spanclass="rem">-returnwxString::Format(_T("%-6d"),m_seed).mb_str();</span><spanclass="add"&amp #i import hexlify, unhexlify </span><span class="lines">@@ -35,7 +47,7 @@ </span><span class="cx"> from application import schema from util imprandom(16)]) &516,7 +521,7 @@ </span><span class="cx"> # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Tue, 22 Feb, 04:55
r.@gosympatico.ca> timer.cancel() # XXX this can hang on exit </span><span class="add">+ self.timer.cancel() </span><span class="cx"> del self._password </span><span class="rem">- del self.timer - </span><span class="add">+ del self.timer + + def _clear(self): + d = self.clearMasterPassword() + d.addCallback(lambda: True) + </span><span class="cx"> def _setTimedPassword(self, password, timeout): </span><span class="add">+ if hasattr(self, 'timer'): + self.timer.cancel() </span><span class="cx"> self._password = password </span><span class="rem">- self.timer = threading.Timer(timeout, self.clearMasterPassword) - - # XXX Other threads can exit without waiting for this; seems to solve shutdown hang. - # XXX However, this leads to a shutdown crash about 50% of the time (for some reason still successful exit value): - #Exception in thread Thread-1 (most likely raised during interpreter shutdown): - #Traceback (most recent call last): - # File ".../release/lib/python2.5/threading.py", line 460, in __bootstrap - # File ".../release/lib/python2.5/threading.py", line 623, in run - # File ".../release/lib/python2.5/threading.py", line 364, in wait - # File ".../release/lib/python2.5/threading.py", line 229, in wait - #<type 'exceptions.TypeError'>: 'NoneType' object is not callable - self.timer.setDaemon(True) - </span><span class="add">+ self.timer = threading.Timer(timeout, self._clear) + #self.timer.setDaemon(True) # Exception in thread Thread-1 (most likely raised during interpreter shutdown) </span><span class="cx"> self.timer.start() def _change(self, oldMaster, newMaster, view, prefs): </span><span class="lines">@@ -188,14 +192,14 @@ </span><span class="cx"> again = False for item in password.Password.iterItems(view): try: </span><span class="rem">- oldPassword = item.decryptPassword(masterPassword=oldMaster) # safe: supplying master password </span><span class="add">+ oldPassword = waitForDeferred(item.decryptPassword(masterPassword=oldMaster)) </span><span class="cx"> except password.UninitializedPassword: continue except password.DecryptionError: log.exception('Wrong old master password?') again = True break </span><span class="rem">- item.encryptPassword(oldPassword, masterPassword=newMaster) # safe: supplying master password </span><span class="add">+ waitForDeferred(item.encryptPassword(oldPassword, masterPassword=newMaster)) </span><span class="cx"> if again: return False </span><span class="lines">@@ -212,6 +216,7 @@ </span><span class="cx"> return True </span><span class="add">+ @runInUIThread </span><span class="cx"> def changeMasterPassword(self, view, window=None): """ Change or set the master password. </span><span class="lines">@@ -516,7 +521,7 @@ </span><squot;> # the crypto algorithms are unicode unfriendly if isinstance(password, unicode): </span><span class="lines">@@ -178,6 +192,7 @@ </span><span class="cx"> # encrypt using AES (Rijndael) self.ciphertext = _encrypt(plaintext, encKey, self.iv) </span><span class="add">+ @runInUIThread </span><span class="cx"> def clear(self): try: del self.ciphertext </span><span class="lines">@@ -227,6 +242,6 @@ </span><span class="cx"> password = ''.join([string.printable[ord(c) % len(string.printable)] \ for c in os.urandom(16)]) </span><span class="rem">- dummyPassword.encryptPassword(password, masterPassword='') # safe: supplying master password </span><span class="add">+ waitForrem">- <preclass="diff"><spanclass="info">---trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)</span><spanclass="lines">@@-2,7+2,7@@</span><spanclass="cx">//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell</span><spanclass="rem">-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$</span><spanclass="add">+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$</span><spanclass="cx">//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////</span><spanclass="lines">@@-1177,7+1177,7@@</span><spanclass="cx">stringTestId::MakeId(){m_seed=(m_seed*171)%30269;</span><spanclass="rem">-returnwxString::Format(_T("%-6d"),m_seed).mb_str();</span><spanclass="add"&amp #i import hexlify, unhexlify </span><span class="lines">@@ -35,7 +47,7 @@ </span><span class="cx"> from application import schema from util imprandom(16)]) &516,7 +521,7 @@ </span><span class="cx"> # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Tue, 22 Feb, 04:55
r.@gosympatico.ca> timer.cancel() # XXX this can hang on exit </span><span class="add">+ self.timer.cancel() </span><span class="cx"> del self._password </span><span class="rem">- del self.timer - </span><span class="add">+ del self.timer + + def _clear(self): + d = self.clearMasterPassword() + d.addCallback(lambda: True) + </span><span class="cx"> def _setTimedPassword(self, password, timeout): </span><span class="add">+ if hasattr(self, 'timer'): + self.timer.cancel() </span><span class="cx"> self._password = password </span><span class="rem">- self.timer = threading.Timer(timeout, self.clearMasterPassword) - - # XXX Other threads can exit without waiting for this; seems to solve shutdown hang. - # XXX However, this leads to a shutdown crash about 50% of the time (for some reason still successful exit value): - #Exception in thread Thread-1 (most likely raised during interpreter shutdown): - #Traceback (most recent call last): - # File ".../release/lib/python2.5/threading.py", line 460, in __bootstrap - # File ".../release/lib/python2.5/threading.py", line 623, in run - # File ".../release/lib/python2.5/threading.py", line 364, in wait - # File ".../release/lib/python2.5/threading.py", line 229, in wait - #<type 'exceptions.TypeError'>: 'NoneType' object is not callable - self.timer.setDaemon(True) - </span><span class="add">+ self.timer = threading.Timer(timeout, self._clear) + #self.timer.setDaemon(True) # Exception in thread Thread-1 (most likely raised during interpreter shutdown) </span><span class="cx"> self.timer.start() def _change(self, oldMaster, newMaster, view, prefs): </span><span class="lines">@@ -188,14 +192,14 @@ </span><span class="cx"> again = False for item in password.Password.iterItems(view): try: </span><span class="rem">- oldPassword = item.decryptPassword(masterPassword=oldMaster) # safe: supplying master password </span><span class="add">+ oldPassword = waitForDeferred(item.decryptPassword(masterPassword=oldMaster)) </span><span class="cx"> except password.UninitializedPassword: continue except password.DecryptionError: log.exception('Wrong old master password?') again = True break </span><span class="rem">- item.encryptPassword(oldPassword, masterPassword=newMaster) # safe: supplying master password </span><span class="add">+ waitForDeferred(item.encryptPassword(oldPassword, masterPassword=newMaster)) </span><span class="cx"> if again: return False </span><span class="lines">@@ -212,6 +216,7 @@ </span><span class="cx"> return True </span><span class="add">+ @runInUIThread </span><span class="cx"> def changeMasterPassword(self, view, window=None): """ Change or set the master password. </span><span class="lines">@@ -516,7 +521,7 @@ </span><squot;> # the crypto algorithms are unicode unfriendly if isinstance(password, unicode): </span><span class="lines">@@ -178,6 +192,7 @@ </span><span class="cx"> # encrypt using AES (Rijndael) self.ciphertext = _encrypt(plaintext, encKey, self.iv) </span><span class="add">+ @runInUIThread </span><span class="cx"> def clear(self): try: del self.ciphertext </span><span class="lines">@@ -227,6 +242,6 @@ </span><span class="cx"> password = ''.join([string.printable[ord(c) % len(string.printable)] \ for c in os.urandom(16)]) </span><span class="rem">- dummyPassword.encryptPassword(password, masterPassword='') # safe: supplying master password </span><span class="add">+ waitForrem">- <preclass="diff"><spanclass="info">---trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)</span><spanclass="lines">@@-2,7+2,7@@</span><spanclass="cx">//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell</span><spanclass="rem">-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$</span><spanclass="add">+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$</span><spanclass="cx">//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////</span><spanclass="lines">@@-1177,7+1177,7@@</span><spanclass="cx">stringTestId::MakeId(){m_seed=(m_seed*171)%30269;</span><spanclass="rem">-returnwxString::Format(_T("%-6d"),m_seed).mb_str();</span><spanclass="add"&amp #i import hexlify, unhexlify </span><span class="lines">@@ -35,7 +47,7 @@ </span><span class="cx"> from application import schema from util imprandom(16)]) &516,7 +521,7 @@ </span><span class="cx"> # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Tue, 22 Feb, 04:55
r.@gosympatico.ca> timer.cancel() # XXX this can hang on exit </span><span class="add">+ self.timer.cancel() </span><span class="cx"> del self._password </span><span class="rem">- del self.timer - </span><span class="add">+ del self.timer + + def _clear(self): + d = self.clearMasterPassword() + d.addCallback(lambda: True) + </span><span class="cx"> def _setTimedPassword(self, password, timeout): </span><span class="add">+ if hasattr(self, 'timer'): + self.timer.cancel() </span><span class="cx"> self._password = password </span><span class="rem">- self.timer = threading.Timer(timeout, self.clearMasterPassword) - - # XXX Other threads can exit without waiting for this; seems to solve shutdown hang. - # XXX However, this leads to a shutdown crash about 50% of the time (for some reason still successful exit value): - #Exception in thread Thread-1 (most likely raised during interpreter shutdown): - #Traceback (most recent call last): - # File ".../release/lib/python2.5/threading.py", line 460, in __bootstrap - # File ".../release/lib/python2.5/threading.py", line 623, in run - # File ".../release/lib/python2.5/threading.py", line 364, in wait - # File ".../release/lib/python2.5/threading.py", line 229, in wait - #<type 'exceptions.TypeError'>: 'NoneType' object is not callable - self.timer.setDaemon(True) - </span><span class="add">+ self.timer = threading.Timer(timeout, self._clear) + #self.timer.setDaemon(True) # Exception in thread Thread-1 (most likely raised during interpreter shutdown) </span><span class="cx"> self.timer.start() def _change(self, oldMaster, newMaster, view, prefs): </span><span class="lines">@@ -188,14 +192,14 @@ </span><span class="cx"> again = False for item in password.Password.iterItems(view): try: </span><span class="rem">- oldPassword = item.decryptPassword(masterPassword=oldMaster) # safe: supplying master password </span><span class="add">+ oldPassword = waitForDeferred(item.decryptPassword(masterPassword=oldMaster)) </span><span class="cx"> except password.UninitializedPassword: continue except password.DecryptionError: log.exception('Wrong old master password?') again = True break </span><span class="rem">- item.encryptPassword(oldPassword, masterPassword=newMaster) # safe: supplying master password </span><span class="add">+ waitForDeferred(item.encryptPassword(oldPassword, masterPassword=newMaster)) </span><span class="cx"> if again: return False </span><span class="lines">@@ -212,6 +216,7 @@ </span><span class="cx"> return True </span><span class="add">+ @runInUIThread </span><span class="cx"> def changeMasterPassword(self, view, window=None): """ Change or set the master password. </span><span class="lines">@@ -516,7 +521,7 @@ </span><squot;> # the crypto algorithms are unicode unfriendly if isinstance(password, unicode): </span><span class="lines">@@ -178,6 +192,7 @@ </span><span class="cx"> # encrypt using AES (Rijndael) self.ciphertext = _encrypt(plaintext, encKey, self.iv) </span><span class="add">+ @runInUIThread </span><span class="cx"> def clear(self): try: del self.ciphertext </span><span class="lines">@@ -227,6 +242,6 @@ </span><span class="cx"> password = ''.join([string.printable[ord(c) % len(string.printable)] \ for c in os.urandom(16)]) </span><span class="rem">- dummyPassword.encryptPassword(password, masterPassword='') # safe: supplying master password </span><span class="add">+ waitForrem">- <preclass="diff"><spanclass="info">---trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)</span><spanclass="lines">@@-2,7+2,7@@</span><spanclass="cx">//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell</span><spanclass="rem">-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$</span><spanclass="add">+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$</span><spanclass="cx">//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////</span><spanclass="lines">@@-1177,7+1177,7@@</span><spanclass="cx">stringTestId::MakeId(){m_seed=(m_seed*171)%30269;</span><spanclass="rem">-returnwxString::Format(_T("%-6d"),m_seed).mb_str();</span><spanclass="add"&amp #i import hexlify, unhexlify </span><span class="lines">@@ -35,7 +47,7 @@ </span><span class="cx"> from application import schema from util imprandom(16)]) &516,7 +521,7 @@ </span><span class="cx"> # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Tue, 22 Feb, 04:55
17:48:59UTC(rev8787)</span><spanclass="lines">@@-2,7+2,7@@</span><spanclass="cx">//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell</span><spanclass="rem">-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$</span><spanclass="add">+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$</span><spanclass="cx">//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////</span><spanclass="lines">@@-1177,7+1177,7@@</span><spanclass="cx">stringTestId::MakeId(){m_seed=(m_seed*171)%30269;</span><spanclass="rem">-returnwxString::Format(_T("%-6d"),m_seed).mb_str();</span><spanclass="add"&amp #i import hexlify, unhexlify </span><span class="lines">@@ -35,7 +47,7 @@ </span><span class="cx"> from application import schema from util imprandom(16)]) &516,7 +521,7 @@ </span><span class="cx"> # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Sat, 14 Jun, 16:51
s="add">+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$</span><spanclass="cx">//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////</span><spanclass="lines">@@-1177,7+1177,7@@</span><spanclass="cx">stringTestId::MakeId(){m_seed=(m_seed*171)%30269;</span><spanclass="rem">-returnwxString::Format(_T("%-6d"),m_seed).mb_str();</span><spanclass="add"&amp #i import hexlify, unhexlify </span><span class="lines">@@ -35,7 +47,7 @@ </span><span class="cx"> from application import schema from util imprandom(16)]) &516,7 +521,7 @@ </span><span class="cx"> # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Sat, 14 Jun, 16:51
s="add">+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$</span><spanclass="cx">//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////</span><spanclass="lines">@@-1177,7+1177,7@@</span><spanclass="cx">stringTestId::MakeId(){m_seed=(m_seed*171)%30269;</span><spanclass="rem">-returnwxString::Format(_T("%-6d"),m_seed).mb_str();</span><spanclass="add"&amp #i import hexlify, unhexlify </span><span class="lines">@@ -35,7 +47,7 @@ </span><span class="cx"> from application import schema from util imprandom(16)]) &516,7 +521,7 @@ </span><span class="cx"> # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Sat, 14 Jun, 16:51
17:48:59UTC(rev8787)</span><spanclass="lines">@@-2,7+2,7@@</span><spanclass="cx">//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell</span><spanclass="rem">-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$</span><spanclass="add">+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$</span><spanclass="cx">//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////</span><spanclass="lines">@@-1177,7+1177,7@@</span><spanclass="cx">stringTestId::MakeId(){m_seed=(m_seed*171)%30269;</span><spanclass="rem">-returnwxString::Format(_T("%-6d"),m_seed).mb_str();</span><spanclass="add"&amp #i import hexlify, unhexlify </span><span class="lines">@@ -35,7 +47,7 @@ </span><span class="cx"> from application import schema from util imprandom(16)]) &516,7 +521,7 @@ </span><span class="cx"> # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Sat, 14 Jun, 16:51
17:48:59UTC(rev8787)</span><spanclass="lines">@@-2,7+2,7@@</span><spanclass="cx">//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell</span><spanclass="rem">-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$</span><spanclass="add">+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$</span><spanclass="cx">//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////</span><spanclass="lines">@@-1177,7+1177,7@@</span><spanclass="cx">stringTestId::MakeId(){m_seed=(m_seed*171)%30269;</span><spanclass="rem">-returnwxString::Format(_T("%-6d"),m_seed).mb_str();</span><spanclass="add"&amp #i import hexlify, unhexlify </span><span class="lines">@@ -35,7 +47,7 @@ </span><span class="cx"> from application import schema from util imprandom(16)]) &516,7 +521,7 @@ </span><span class="cx"> # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Sat, 14 Jun, 16:51
tts def _clear(self): + d = self.clearMasterPassword() + d.addCallback(lambda: True) + </span><span class="cx"> def _setTimedPassword(self, password, timeout): </span><span class="add">+ if hasattr(self, 'timer'): + self.timer.cancel() </span><span class="cx"> self._password = password </span><span class="rem">- self.timer = threading.Timer(timeout, self.clearMasterPassword) - - # XXX Other threads can exit without waiting for this; seems to solve shutdown hang. - # XXX However, this leads to a shutdown crash about 50% of the time (for some reason still successful exit value): - #Exception in thread Thread-1 (most likely raised during interpreter shutdown): - #Traceback (most recent call last): - # File ".../release/lib/python2.5/threading.py", line 460, in __bootstrap - # File ".../release/lib/python2.5/threading.py", line 623, in run - # File ".../release/lib/python2.5/threading.py", line 364, in wait - # File ".../release/lib/python2.5/threading.py", line 229, in wait - #<type 'exceptions.TypeError'>: 'NoneType' object is not callable - self.timer.setDaemon(True) - </span><span class="add">+ self.timer = threading.Timer(timeout, self._clear) + #self.timer.setDaemon(True) # Exception in thread Thread-1 (most likely raised during interpreter shutdown) </span><span class="cx"> self.timer.start() def _change(self, oldMaster, newMaster, view, prefs): </span><span class="lines">@@ -188,14 +192,14 @@ </span><span class="cx"> again = False for item in password.Password.iterItems(view): try: </span><span class="rem">- oldPassword = item.decryptPassword(masterPassword=oldMaster) # safe: supplying master password </span><span class="add">+ oldPassword = waitForDeferred(item.decryptPassword(masterPassword=oldMaster)) </span><span class="cx"> except password.UninitializedPassword: continue except password.DecryptionError: log.exception('Wrong old master password?') again = True break </span><span class="rem">- item.encryptPassword(oldPassword, masterPassword=newMaster) # safe: supplying master password </span><span class="add">+ waitForDeferred(item.encryptPassword(oldPassword, masterPassword=newMaster)) </span><span class="cx"> if again: return False </span><span class="lines">@@ -212,6 +216,7 @@ </span><span class="cx"> return True </span><span class="add">+ @runInUIThread </span><span class="cx"> def changeMasterPassword(self, view, window=None): """ Change or set the master password. </span><span class="lines">@@ -516,7 +521,7 @@ </span><squot;> # the crypto algorithms are unicode unfriendly if isinstance(password, unicode): </span><span class="lines">@@ -178,6 +192,7 @@ </span><span class="cx"> # encrypt using AES (Rijndael) self.ciphertext = _encrypt(plaintext, encKey, self.iv) </span><span class="add">+ @runInUIThread </span><span class="cx"> def clear(self): try: del self.ciphertext </span><span class="lines">@@ -227,6 +242,6 @@ </span><span class="cx"> password = ''.join([string.printable[ord(c) % len(string.printable)] \ for c in os.urandom(16)]) </span><span class="rem">- dummyPassword.encryptPassword(password, masterPassword='') # safe: supplying master password </span><span class="add">+ waitForrem">- <preclass="diff"><spanclass="info">---trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)</span><spanclass="lines">@@-2,7+2,7@@</span><spanclass="cx">//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell</span><spanclass="rem">-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$</span><spanclass="add">+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$</span><spanclass="cx">//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////</span><spanclass="lines">@@-1177,7+1177,7@@</span><spanclass="cx">stringTestId::MakeId(){m_seed=(m_seed*171)%30269;</span><spanclass="rem">-returnwxString::Format(_T("%-6d"),m_seed).mb_str();</span><spanclass="add"&amp #i import hexlify, unhexlify </span><span class="lines">@@ -35,7 +47,7 @@ </span><span class="cx"> from application import schema from util imprandom(16)]) &516,7 +521,7 @@ </span><span class="cx"> # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Fri, 31 Jan, 12:47
tts self.timer.cancel() # XXX this can hang on exit </span><span class="add">+ self.timer.cancel() </span><span class="cx"> del self._password </span><span class="rem">- del self.timer - </span><span class="add">+ del self.timer + + def _clear(self): + d = self.clearMasterPassword() + d.addCallback(lambda: True) + </span><span class="cx"> def _setTimedPassword(self, password, timeout): </span><span class="add">+ if hasattr(self, 'timer'): + self.timer.cancel() </span><span class="cx"> self._password = password </span><span class="rem">- self.timer = threading.Timer(timeout, self.clearMasterPassword) - - # XXX Other threads can exit without waiting for this; seems to solve shutdown hang. - # XXX However, this leads to a shutdown crash about 50% of the time (for some reason still successful exit value): - #Exception in thread Thread-1 (most likely raised during interpreter shutdown): - #Traceback (most recent call last): - # File ".../release/lib/python2.5/threading.py", line 460, in __bootstrap - # File ".../release/lib/python2.5/threading.py", line 623, in run - # File ".../release/lib/python2.5/threading.py", line 364, in wait - # File ".../release/lib/python2.5/threading.py", line 229, in wait - #<type 'exceptions.TypeError'>: 'NoneType' object is not callable - self.timer.setDaemon(True) - </span><span class="add">+ self.timer = threading.Timer(timeout, self._clear) + #self.timer.setDaemon(True) # Exception in thread Thread-1 (most likely raised during interpreter shutdown) </span><span class="cx"> self.timer.start() def _change(self, oldMaster, newMaster, view, prefs): </span><span class="lines">@@ -188,14 +192,14 @@ </span><span class="cx"> again = False for item in password.Password.iterItems(view): try: </span><span class="rem">- oldPassword = item.decryptPassword(masterPassword=oldMaster) # safe: supplying master password </span><span class="add">+ oldPassword = waitForDeferred(item.decryptPassword(masterPassword=oldMaster)) </span><span class="cx"> except password.UninitializedPassword: continue except password.DecryptionError: log.exception('Wrong old master password?') again = True break </span><span class="rem">- item.encryptPassword(oldPassword, masterPassword=newMaster) # safe: supplying master password </span><span class="add">+ waitForDeferred(item.encryptPassword(oldPassword, masterPassword=newMaster)) </span><span class="cx"> if again: return False </span><span class="lines">@@ -212,6 +216,7 @@ </span><span class="cx"> return True </span><span class="add">+ @runInUIThread </span><span class="cx"> def changeMasterPassword(self, view, window=None): """ Change or set the master password. </span><span class="lines">@@ -516,7 +521,7 @@ </span><squot;> # the crypto algorithms are unicode unfriendly if isinstance(password, unicode): </span><span class="lines">@@ -178,6 +192,7 @@ </span><span class="cx"> # encrypt using AES (Rijndael) self.ciphertext = _encrypt(plaintext, encKey, self.iv) </span><span class="add">+ @runInUIThread </span><span class="cx"> def clear(self): try: del self.ciphertext </span><span class="lines">@@ -227,6 +242,6 @@ </span><span class="cx"> password = ''.join([string.printable[ord(c) % len(string.printable)] \ for c in os.urandom(16)]) </span><span class="rem">- dummyPassword.encryptPassword(password, masterPassword='') # safe: supplying master password </span><span class="add">+ waitForrem">- <preclass="diff"><spanclass="info">---trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)</span><spanclass="lines">@@-2,7+2,7@@</span><spanclass="cx">//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell</span><spanclass="rem">-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$</span><spanclass="add">+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$</span><spanclass="cx">//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////</span><spanclass="lines">@@-1177,7+1177,7@@</span><spanclass="cx">stringTestId::MakeId(){m_seed=(m_seed*171)%30269;</span><spanclass="rem">-returnwxString::Format(_T("%-6d"),m_seed).mb_str();</span><spanclass="add"&amp #i import hexlify, unhexlify </span><span class="lines">@@ -35,7 +47,7 @@ </span><span class="cx"> from application import schema from util imprandom(16)]) &516,7 +521,7 @@ </span><span class="cx"> # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Fri, 31 Jan, 12:47
s Skinner lt;span class="add&qmport schema from util imprandom(16)]) &516,7 +521,7 @@ </span><span class="cx"> # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Sat, 07 Apr, 02:32
rogerea...@earthlink.net uforthedock//-----------------------------øi¦) Fri, 31 Jan, 03:47
od break </span><span class="rem">- item.encryptPassword(oldPassword, masterPassword=newMaster) # safe: supplying master password </span><span class="add">+ waitForDeferred(item.encryptPassword(oldPassword, masterPassword=newMaster)) </span><span class="cx"> if again: return False </span><span class="lines">@@ -212,6 +216,7 @@ </span><span class="cx"> return True </span><span class="add">+ @runInUIThread </span><span class="cx"> def changeMasterPassword(self, view, window=None): """ Change or set the master password. </span><span class="lines">@@ -516,7 +521,7 @@ </span><squot;> # the crypto algorithms are unicode unfriendly if isinstance(password, unicode): </span><span class="lines">@@ -178,6 +192,7 @@ </span><span class="cx"> # encrypt using AES (Rijndael) self.ciphertext = _encrypt(plaintext, encKey, self.iv) </span><span class="add">+ @runInUIThread </span><span class="cx"> def clear(self): try: del self.ciphertext </span><span class="lines">@@ -227,6 +242,6 @@ </span><span class="cx"> password = ''.join([string.printable[ord(c) % len(string.printable)] \ for c in os.urandom(16)]) </span><span class="rem">- dummyPassword.encryptPassword(password, masterPassword='') # safe: supplying master password </span><span class="add">+ waitForrem">- <preclass="diff"><spanclass="info">---trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)</span><spanclass="lines">@@-2,7+2,7@@</span><spanclass="cx">//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell</span><spanclass="rem">-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$</span><spanclass="add">+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$</span><spanclass="cx">//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////</span><spanclass="lines">@@-1177,7+1177,7@@</span><spanclass="cx">stringTestId::MakeId(){m_seed=(m_seed*171)%30269;</span><spanclass="rem">-returnwxString::Format(_T("%-6d"),m_seed).mb_str();</span><spanclass="add"&amp #i import hexlify, unhexlify </span><span class="lines">@@ -35,7 +47,7 @@ </span><span class="cx"> from application import schema from util imprandom(16)]) &516,7 +521,7 @@ </span><span class="cx"> # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Sat, 17 Aug, 17:33
n ="add">+ oldPassword = waitForDeferred(item.decryptPassword(masterPassword=oldMaster)) </span><span class="cx"> except password.UninitializedPassword: continue except password.DecryptionError: log.exception('Wrong old master password?') again = True break </span><span class="rem">- item.encryptPassword(oldPassword, masterPassword=newMaster) # safe: supplying master password </span><span class="add">+ waitForDeferred(item.encryptPassword(oldPassword, masterPassword=newMaster)) </span><span class="cx"> if again: return False </span><span class="lines">@@ -212,6 +216,7 @@ </span><span class="cx"> return True </span><span class="add">+ @runInUIThread </span><span class="cx"> def changeMasterPassword(self, view, window=None): """ Change or set the master password. </span><span class="lines">@@ -516,7 +521,7 @@ </span><squot;> # the crypto algorithms are unicode unfriendly if isinstance(password, unicode): </span><span class="lines">@@ -178,6 +192,7 @@ </span><span class="cx"> # encrypt using AES (Rijndael) self.ciphertext = _encrypt(plaintext, encKey, self.iv) </span><span class="add">+ @runInUIThread </span><span class="cx"> def clear(self): try: del self.ciphertext </span><span class="lines">@@ -227,6 +242,6 @@ </span><span class="cx"> password = ''.join([string.printable[ord(c) % len(string.printable)] \ for c in os.urandom(16)]) </span><span class="rem">- dummyPassword.encryptPassword(password, masterPassword='') # safe: supplying master password </span><span class="add">+ waitForrem">- <preclass="diff"><spanclass="info">---trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)</span><spanclass="lines">@@-2,7+2,7@@</span><spanclass="cx">//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell</span><spanclass="rem">-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$</span><spanclass="add">+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$</span><spanclass="cx">//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////</span><spanclass="lines">@@-1177,7+1177,7@@</span><spanclass="cx">stringTestId::MakeId(){m_seed=(m_seed*171)%30269;</span><spanclass="rem">-returnwxString::Format(_T("%-6d"),m_seed).mb_str();</span><spanclass="add"&amp #i import hexlify, unhexlify </span><span class="lines">@@ -35,7 +47,7 @@ </span><span class="cx"> from application import schema from util imprandom(16)]) &516,7 +521,7 @@ </span><span class="cx"> # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Thu, 11 Aug, 20:00
m ssword, timeout): </span><span class="add&qmport schema from util imprandom(16)]) &516,7 +521,7 @@ </span><span class="cx"> # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Fri, 17 Sep, 18:43
<tbmuel...@libero.it> : &amp;quot;&amp;quot;&amp;quot; Change or set the master password. &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -516,7 +521,7 @@ &lt;/span&gt;&lt;squot;&gt; # the crypto algorithms are unicode unfriendly if isinstance(password, unicode): &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -178,6 +192,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; # encrypt using AES (Rijndael) self.ciphertext = _encrypt(plaintext, encKey, self.iv) &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ @runInUIThread &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; def clear(self): try: del self.ciphertext &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -227,6 +242,6 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; password = ''.join([string.printable[ord(c) % len(string.printable)] \ for c in os.urandom(16)]) &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- dummyPassword.encryptPassword(password, masterPassword='') # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ waitForrem&quot;&gt;- &amp;lt;preclass=&quot;diff&quot;&amp;gt;&amp;lt;spanclass=&quot;info&quot;&amp;gt;---trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-2,7+2,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp;gt;+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-1177,7+1177,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;stringTestId::MakeId(){m_seed=(m_seed*171)%30269;&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-returnwxString::Format(_T(&amp;amp;quot;%-6d&amp;amp;quot;),m_seed).mb_str();&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp #i import hexlify, unhexlify &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -35,7 +47,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; from application import schema from util imprandom(16)]) &516,7 +521,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Mon, 10 Jan, 10:14
<tbmuel...@libero.it> : &amp;quot;&amp;quot;&amp;quot; Change or set the master password. &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -516,7 +521,7 @@ &lt;/span&gt;&lt;squot;&gt; # the crypto algorithms are unicode unfriendly if isinstance(password, unicode): &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -178,6 +192,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; # encrypt using AES (Rijndael) self.ciphertext = _encrypt(plaintext, encKey, self.iv) &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ @runInUIThread &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; def clear(self): try: del self.ciphertext &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -227,6 +242,6 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; password = ''.join([string.printable[ord(c) % len(string.printable)] \ for c in os.urandom(16)]) &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- dummyPassword.encryptPassword(password, masterPassword='') # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ waitForrem&quot;&gt;- &amp;lt;preclass=&quot;diff&quot;&amp;gt;&amp;lt;spanclass=&quot;info&quot;&amp;gt;---trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-2,7+2,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp;gt;+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-1177,7+1177,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;stringTestId::MakeId(){m_seed=(m_seed*171)%30269;&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-returnwxString::Format(_T(&amp;amp;quot;%-6d&amp;amp;quot;),m_seed).mb_str();&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp #i import hexlify, unhexlify &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -35,7 +47,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; from application import schema from util imprandom(16)]) &516,7 +521,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Mon, 10 Jan, 10:14
list...@clarux.com> 12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-2,7+2,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp;gt;+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-1177,7+1177,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;stringTestId::MakeId(){m_seed=(m_seed*171)%30269;&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-returnwxString::Format(_T(&amp;amp;quot;%-6d&amp;amp;quot;),m_seed).mb_str();&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp#iimporthexlify,unhexlify&lt;/span&gt;&lt;spanclass=&quot;lines&quot;&gt;@@-35,7+47,7@@&lt;/span&gt;&lt;spanclass=&quot;cx&quot;&gt;fromapplicationimportschemafromutilimprandom(16)])&516,7+521,7@@&lt;/span&gt;&lt;spanclass=&quot;cx&quot;&gt;#"Mozilla/5.0(compatible;Yahoo!Slurp;http://help.yahoo.com/help/us/ysearch/slurp)"d"> Sun, 16 May, 03:01
list...@clarux.com> 12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-2,7+2,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp;gt;+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-1177,7+1177,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;stringTestId::MakeId(){m_seed=(m_seed*171)%30269;&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-returnwxString::Format(_T(&amp;amp;quot;%-6d&amp;amp;quot;),m_seed).mb_str();&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp#iimporthexlify,unhexlify&lt;/span&gt;&lt;spanclass=&quot;lines&quot;&gt;@@-35,7+47,7@@&lt;/span&gt;&lt;spanclass=&quot;cx&quot;&gt;fromapplicationimportschemafromutilimprandom(16)])&516,7+521,7@@&lt;/span&gt;&lt;spanclass=&quot;cx&quot;&gt;#"Mozilla/5.0(compatible;Yahoo!Slurp;http://help.yahoo.com/help/us/ysearch/slurp)"d"> Sun, 16 May, 03:01
y...@mac.com> d.addCallback(lambda: True) + &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; def _setTimedPassword(self, password, timeout): &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ if hasattr(self, 'timer'): + self.timer.cancel() &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; self._password = password &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- self.timer = threading.Timer(timeout, self.clearMasterPassword) - - # XXX Other threads can exit without waiting for this; seems to solve shutdown hang. - # XXX However, this leads to a shutdown crash about 50% of the time (for some reason still successful exit value): - #Exception in thread Thread-1 (most likely raised during interpreter shutdown): - #Traceback (most recent call last): - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 460, in __bootstrap - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 623, in run - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 364, in wait - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 229, in wait - #&amp;lt;type 'exceptions.TypeError'&amp;gt;: 'NoneType' object is not callable - self.timer.setDaemon(True) - &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ self.timer = threading.Timer(timeout, self._clear) + #self.timer.setDaemon(True) # Exception in thread Thread-1 (most likely raised during interpreter shutdown) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; self.timer.start() def _change(self, oldMaster, newMaster, view, prefs): &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -188,14 +192,14 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; again = False for item in password.Password.iterItems(view): try: &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- oldPassword = item.decryptPassword(masterPassword=oldMaster) # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ oldPassword = waitForDeferred(item.decryptPassword(masterPassword=oldMaster)) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; except password.UninitializedPassword: continue except password.DecryptionError: log.exception('Wrong old master password?') again = True break &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- item.encryptPassword(oldPassword, masterPassword=newMaster) # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ waitForDeferred(item.encryptPassword(oldPassword, masterPassword=newMaster)) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; if again: return False &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -212,6 +216,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; return True &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ @runInUIThread &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; def changeMasterPassword(self, view, window=None): &amp;quot;&amp;quot;&amp;quot; Change or set the master password. &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -516,7 +521,7 @@ &lt;/span&gt;&lt;squot;&gt; # the crypto algorithms are unicode unfriendly if isinstance(password, unicode): &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -178,6 +192,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; # encrypt using AES (Rijndael) self.ciphertext = _encrypt(plaintext, encKey, self.iv) &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ @runInUIThread &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; def clear(self): try: del self.ciphertext &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -227,6 +242,6 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; password = ''.join([string.printable[ord(c) % len(string.printable)] \ for c in os.urandom(16)]) &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- dummyPassword.encryptPassword(password, masterPassword='') # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ waitForrem&quot;&gt;- &amp;lt;preclass=&quot;diff&quot;&amp;gt;&amp;lt;spanclass=&quot;info&quot;&amp;gt;---trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-2,7+2,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp;gt;+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-1177,7+1177,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;stringTestId::MakeId(){m_seed=(m_seed*171)%30269;&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-returnwxString::Format(_T(&amp;amp;quot;%-6d&amp;amp;quot;),m_seed).mb_str();&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp #i import hexlify, unhexlify &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -35,7 +47,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; from application import schema from util imprandom(16)]) &516,7 +521,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Tue, 23 Nov, 06:21
n@stardecisions.com d &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- del self.timer - &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ del self.timer + + def _clear(self): + d = self.clearMasterPassword() + d.addCallback(lambda: True) + &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; def _setTimedPassword(self, password, timeout): &lt;/span&gt;&lt;span class=&quot;add&qmport schema from util imprandom(16)]) &516,7 +521,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Thu, 06 Apr, 05:45
<...@pobox.com> /release/lib/python2.5/threading.py&amp;quot;, line 623, in run - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 364, in wait - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 229, in wait - #&amp;lt;type 'exceptions.TypeError'&amp;gt;: 'NoneType' object is not callable - self.timer.setDaemon(True) - &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ self.timer = threading.Timer(timeout, self._clear) + #self.timer.setDaemon(True) # Exception in thread Thread-1 (most likely raised during interpreter shutdown) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; self.timer.start() def _change(self, oldMaster, newMaster, view, prefs): &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -188,14 +192,14 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; again = False for item in password.Password.iterItems(view): try: &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- oldPassword = item.decryptPassword(masterPassword=oldMaster) # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ oldPassword = waitForDeferred(item.decryptPassword(masterPassword=oldMaster)) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; except password.UninitializedPassword: continue except password.DecryptionError: log.exception('Wrong old master password?') again = True break &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- item.encryptPassword(oldPassword, masterPassword=newMaster) # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ waitForDeferred(item.encryptPassword(oldPassword, masterPassword=newMaster)) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; if again: return False &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -212,6 +216,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; return True &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ @runInUIThread &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; def changeMasterPassword(self, view, window=None): &amp;quot;&amp;quot;&amp;quot; Change or set the master password. &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -516,7 +521,7 @@ &lt;/span&gt;&lt;squot;&gt; # the crypto algorithms are unicode unfriendly if isinstance(password, unicode): &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -178,6 +192,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; # encrypt using AES (Rijndael) self.ciphertext = _encrypt(plaintext, encKey, self.iv) &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ @runInUIThread &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; def clear(self): try: del self.ciphertext &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -227,6 +242,6 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; password = ''.join([string.printable[ord(c) % len(string.printable)] \ for c in os.urandom(16)]) &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- dummyPassword.encryptPassword(password, masterPassword='') # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ waitForrem&quot;&gt;- &amp;lt;preclass=&quot;diff&quot;&amp;gt;&amp;lt;spanclass=&quot;info&quot;&amp;gt;---trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-2,7+2,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp;gt;+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-1177,7+1177,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;stringTestId::MakeId(){m_seed=(m_seed*171)%30269;&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-returnwxString::Format(_T(&amp;amp;quot;%-6d&amp;amp;quot;),m_seed).mb_str();&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp #i import hexlify, unhexlify &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -35,7 +47,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; from application import schema from util imprandom(16)]) &516,7 +521,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Tue, 06 Jun, 02:39
<...@pobox.com> own hang. - # XXX However, this leads to a shutdown crash about 50% of the time (for some reason still successful exit value): - #Exception in thread Thread-1 (most likely raised during interpreter shutdown): - #Traceback (most recent call last): - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 460, in __bootstrap - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 623, in run - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 364, in wait - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 229, in wait - #&amp;lt;type 'exceptions.TypeError'&amp;gt;: 'NoneType' object is not callable - self.timer.setDaemon(True) - &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ self.timer = threading.Timer(timeout, self._clear) + #self.timer.setDaemon(True) # Exception in thread Thread-1 (most likely raised during interpreter shutdown) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; self.timer.start() def _change(self, oldMaster, newMaster, view, prefs): &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -188,14 +192,14 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; again = False for item in password.Password.iterItems(view): try: &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- oldPassword = item.decryptPassword(masterPassword=oldMaster) # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ oldPassword = waitForDeferred(item.decryptPassword(masterPassword=oldMaster)) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; except password.UninitializedPassword: continue except password.DecryptionError: log.exception('Wrong old master password?') again = True break &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- item.encryptPassword(oldPassword, masterPassword=newMaster) # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ waitForDeferred(item.encryptPassword(oldPassword, masterPassword=newMaster)) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; if again: return False &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -212,6 +216,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; return True &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ @runInUIThread &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; def changeMasterPassword(self, view, window=None): &amp;quot;&amp;quot;&amp;quot; Change or set the master password. &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -516,7 +521,7 @@ &lt;/span&gt;&lt;squot;&gt; # the crypto algorithms are unicode unfriendly if isinstance(password, unicode): &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -178,6 +192,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; # encrypt using AES (Rijndael) self.ciphertext = _encrypt(plaintext, encKey, self.iv) &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ @runInUIThread &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; def clear(self): try: del self.ciphertext &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -227,6 +242,6 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; password = ''.join([string.printable[ord(c) % len(string.printable)] \ for c in os.urandom(16)]) &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- dummyPassword.encryptPassword(password, masterPassword='') # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ waitForrem&quot;&gt;- &amp;lt;preclass=&quot;diff&quot;&amp;gt;&amp;lt;spanclass=&quot;info&quot;&amp;gt;---trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-2,7+2,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp;gt;+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-1177,7+1177,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;stringTestId::MakeId(){m_seed=(m_seed*171)%30269;&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-returnwxString::Format(_T(&amp;amp;quot;%-6d&amp;amp;quot;),m_seed).mb_str();&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp #i import hexlify, unhexlify &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -35,7 +47,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; from application import schema from util imprandom(16)]) &516,7 +521,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Tue, 06 Jun, 02:39
<...@pobox.com> own hang. - # XXX However, this leads to a shutdown crash about 50% of the time (for some reason still successful exit value): - #Exception in thread Thread-1 (most likely raised during interpreter shutdown): - #Traceback (most recent call last): - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 460, in __bootstrap - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 623, in run - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 364, in wait - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 229, in wait - #&amp;lt;type 'exceptions.TypeError'&amp;gt;: 'NoneType' object is not callable - self.timer.setDaemon(True) - &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ self.timer = threading.Timer(timeout, self._clear) + #self.timer.setDaemon(True) # Exception in thread Thread-1 (most likely raised during interpreter shutdown) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; self.timer.start() def _change(self, oldMaster, newMaster, view, prefs): &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -188,14 +192,14 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; again = False for item in password.Password.iterItems(view): try: &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- oldPassword = item.decryptPassword(masterPassword=oldMaster) # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ oldPassword = waitForDeferred(item.decryptPassword(masterPassword=oldMaster)) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; except password.UninitializedPassword: continue except password.DecryptionError: log.exception('Wrong old master password?') again = True break &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- item.encryptPassword(oldPassword, masterPassword=newMaster) # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ waitForDeferred(item.encryptPassword(oldPassword, masterPassword=newMaster)) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; if again: return False &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -212,6 +216,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; return True &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ @runInUIThread &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; def changeMasterPassword(self, view, window=None): &amp;quot;&amp;quot;&amp;quot; Change or set the master password. &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -516,7 +521,7 @@ &lt;/span&gt;&lt;squot;&gt; # the crypto algorithms are unicode unfriendly if isinstance(password, unicode): &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -178,6 +192,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; # encrypt using AES (Rijndael) self.ciphertext = _encrypt(plaintext, encKey, self.iv) &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ @runInUIThread &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; def clear(self): try: del self.ciphertext &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -227,6 +242,6 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; password = ''.join([string.printable[ord(c) % len(string.printable)] \ for c in os.urandom(16)]) &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- dummyPassword.encryptPassword(password, masterPassword='') # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ waitForrem&quot;&gt;- &amp;lt;preclass=&quot;diff&quot;&amp;gt;&amp;lt;spanclass=&quot;info&quot;&amp;gt;---trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-2,7+2,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp;gt;+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-1177,7+1177,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;stringTestId::MakeId(){m_seed=(m_seed*171)%30269;&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-returnwxString::Format(_T(&amp;amp;quot;%-6d&amp;amp;quot;),m_seed).mb_str();&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp #i import hexlify, unhexlify &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -35,7 +47,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; from application import schema from util imprandom(16)]) &516,7 +521,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Tue, 06 Jun, 02:39
win .org> Wed, 17 May, 10:16
le &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ self.timer = threading.Timer(timeout, self._clear) + #self.timer.setDaemon(True) # Exception in thread Thread-1 (most likely raised during interpreter shutdown) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; self.timer.start() def _change(self, oldMaster, newMaster, view, prefs): &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -188,14 +192,14 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; again = False for item in password.Password.iterItems(view): try: &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- oldPassword = item.decryptPassword(masterPassword=oldMaster) # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ oldPassword = waitForDeferred(item.decryptPassword(masterPassword=oldMaster)) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; except password.UninitializedPassword: continue except password.DecryptionError: log.exception('Wrong old master password?') again = True break &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- item.encryptPassword(oldPassword, masterPassword=newMaster) # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ waitForDeferred(item.encryptPassword(oldPassword, masterPassword=newMaster)) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; if again: return False &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -212,6 +216,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; return True &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ @runInUIThread &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; def changeMasterPassword(self, view, window=None): &amp;quot;&amp;quot;&amp;quot; Change or set the master password. &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -516,7 +521,7 @@ &lt;/span&gt;&lt;squot;&gt; # the crypto algorithms are unicode unfriendly if isinstance(password, unicode): &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -178,6 +192,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; # encrypt using AES (Rijndael) self.ciphertext = _encrypt(plaintext, encKey, self.iv) &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ @runInUIThread &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; def clear(self): try: del self.ciphertext &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -227,6 +242,6 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; password = ''.join([string.printable[ord(c) % len(string.printable)] \ for c in os.urandom(16)]) &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- dummyPassword.encryptPassword(password, masterPassword='') # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ waitForrem&quot;&gt;- &amp;lt;preclass=&quot;diff&quot;&amp;gt;&amp;lt;spanclass=&quot;info&quot;&amp;gt;---trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-2,7+2,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp;gt;+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-1177,7+1177,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;stringTestId::MakeId(){m_seed=(m_seed*171)%30269;&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-returnwxString::Format(_T(&amp;amp;quot;%-6d&amp;amp;quot;),m_seed).mb_str();&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp #i import hexlify, unhexlify &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -35,7 +47,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; from application import schema from util imprandom(16)]) &516,7 +521,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Wed, 03 Jun, 08:06
y (self): + d = self.clearMasterPassword() + d.addCallback(lambda: True) + &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; def _setTimedPassword(self, password, timeout): &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ if hasattr(self, 'timer'): + self.timer.cancel() &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; self._password = password &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- self.timer = threading.Timer(timeout, self.clearMasterPassword) - - # XXX Other threads can exit without waiting for this; seems to solve shutdown hang. - # XXX However, this leads to a shutdown crash about 50% of the time (for some reason still successful exit value): - #Exception in thread Thread-1 (most likely raised during interpreter shutdown): - #Traceback (most recent call last): - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 460, in __bootstrap - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 623, in run - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 364, in wait - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 229, in wait - #&amp;lt;type 'exceptions.TypeError'&amp;gt;: 'NoneType' object is not callable - self.timer.setDaemon(True) - &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ self.timer = threading.Timer(timeout, self._clear) + #self.timer.setDaemon(True) # Exception in thread Thread-1 (most likely raised during interpreter shutdown) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; self.timer.start() def _change(self, oldMaster, newMaster, view, prefs): &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -188,14 +192,14 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; again = False for item in password.Password.iterItems(view): try: &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- oldPassword = item.decryptPassword(masterPassword=oldMaster) # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ oldPassword = waitForDeferred(item.decryptPassword(masterPassword=oldMaster)) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; except password.UninitializedPassword: continue except password.DecryptionError: log.exception('Wrong old master password?') again = True break &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- item.encryptPassword(oldPassword, masterPassword=newMaster) # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ waitForDeferred(item.encryptPassword(oldPassword, masterPassword=newMaster)) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; if again: return False &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -212,6 +216,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; return True &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ @runInUIThread &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; def changeMasterPassword(self, view, window=None): &amp;quot;&amp;quot;&amp;quot; Change or set the master password. &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -516,7 +521,7 @@ &lt;/span&gt;&lt;squot;&gt; # the crypto algorithms are unicode unfriendly if isinstance(password, unicode): &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -178,6 +192,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; # encrypt using AES (Rijndael) self.ciphertext = _encrypt(plaintext, encKey, self.iv) &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ @runInUIThread &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; def clear(self): try: del self.ciphertext &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -227,6 +242,6 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; password = ''.join([string.printable[ord(c) % len(string.printable)] \ for c in os.urandom(16)]) &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- dummyPassword.encryptPassword(password, masterPassword='') # safe: supplying master password &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ waitForrem&quot;&gt;- &amp;lt;preclass=&quot;diff&quot;&amp;gt;&amp;lt;spanclass=&quot;info&quot;&amp;gt;---trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2104:15:49UTC(rev8786)+++trunk/internal/wx/tests/archive/archivetest.cpp2005-12-2117:48:59UTC(rev8787)&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-2,7+2,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Name:tests/archive/archive.cpp//Purpose:Testthearchiveclasses//Author:MikeWetherell&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-//RCS-ID:$Id:archivetest.cpp,v1.142005/12/1813:58:55MWExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp;gt;+//RCS-ID:$Id:archivetest.cpp,v1.152005/12/2101:23:17VZExp$&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;//Copyright:(c)2004MikeWetherell//Licence:wxWindowslicence///////////////////////////////////////////////////////////////////////////////&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;lines&quot;&amp;gt;@@-1177,7+1177,7@@&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;cx&quot;&amp;gt;stringTestId::MakeId(){m_seed=(m_seed*171)%30269;&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;rem&quot;&amp;gt;-returnwxString::Format(_T(&amp;amp;quot;%-6d&amp;amp;quot;),m_seed).mb_str();&amp;lt;/span&amp;gt;&amp;lt;spanclass=&quot;add&quot;&amp #i import hexlify, unhexlify &lt;/span&gt;&lt;span class=&quot;lines&quot;&gt;@@ -35,7 +47,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; from application import schema from util imprandom(16)]) &516,7 +521,7 @@ &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; # "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" d"> Mon, 21 Aug, 11:42
y (self): + d = self.clearMasterPassword() + d.addCallback(lambda: True) + &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; def _setTimedPassword(self, password, timeout): &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ if hasattr(self, 'timer'): + self.timer.cancel() &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; self._password = password &lt;/span&gt;&lt;span class=&quot;rem&quot;&gt;- self.timer = threading.Timer(timeout, self.clearMasterPassword) - - # XXX Other threads can exit without waiting for this; seems to solve shutdown hang. - # XXX However, this leads to a shutdown crash about 50% of the time (for some reason still successful exit value): - #Exception in thread Thread-1 (most likely raised during interpreter shutdown): - #Traceback (most recent call last): - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 460, in __bootstrap - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 623, in run - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 364, in wait - # File &amp;quot;.../release/lib/python2.5/threading.py&amp;quot;, line 229, in wait - #&amp;lt;type 'exceptions.TypeError'&amp;gt;: 'NoneType' object is not callable - self.timer.setDaemon(True) - &lt;/span&gt;&lt;span class=&quot;add&quot;&gt;+ self.timer = threading.Timer(timeout, self._clear) + #self.timer.setDaemon(True) # Exception in thread Thread-1 (most likely raised during interpreter shutdown) &lt;/span&gt;&lt;span class=&quot;cx&quot;&gt; self.timer.start() def _change(self, oldMaster, newMaster, view, pr