From: Oleg B. <ph...@ph...> - 2013-05-26 16:12:26
|
Hello! On Thu, May 23, 2013 at 01:48:42PM +0400, Oleg Broytman <ph...@ph...> wrote: > On Wed, May 22, 2013 at 06:16:20PM -0600, Andrew Trusty <at...@ga...> wrote: > > I think you just answered how the bug I reported off-list occurred but I > > was asking about the patch from revision 4530 to 4531 (when the "Cannot > > unpickle" ValueError was first introduced) that fixed a bug relating to > > unpickling. > > > > > http://sourceforge.net/mailarchive/forum.php?thread_name=E1SXzWF-0005Cg-9K%40webwareforpython.org&forum_name=sqlobject-cvs > > > The last line was not changed but id was removed from the code, that > > > how the last line became broken. > > I think the idea is to prevent getting two rows with the same id via > SELECT and unpickling. I fixed the problem but it required much more than just fixing an issue with self.id. The worse problem was that every SQLObject instance has a weak proxy to itself and pickling does strange things -- it calls __getstate__ twice on pickling and calls __setstate__ twice on unpickling. The second call to __setstate__ is certainly a source of problems with cache. Perhaps it's a bug in Python, I'm not sure. I fixed the problem by avoiding pickling the weak proxy and restoring the proxy on unpickling. Committed in the revisions 4601, 4602 (branch 1.3), 4603 (1.4), 4604 (the trunk). I will do releases in a few hours. Thank you very much for helping to find and fix he problems! Oleg. -- Oleg Broytman http://phdru.name/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |