From 4654bb13d8b062ee052c5ce506d710b34d307e1f Mon Sep 17 00:00:00 2001
From: Jim Fulton <jim@zope.com>
Date: Wed, 7 Jul 1999 19:52:28 +0000
Subject: [PATCH] Fixed a bug that messed up ZClass persistence.

---
 src/ZODB/Connection.py | 58 ++++++++++++++++++++++--------------------
 1 file changed, 31 insertions(+), 27 deletions(-)

diff --git a/src/ZODB/Connection.py b/src/ZODB/Connection.py
index 4e9ced19..68602341 100644
--- a/src/ZODB/Connection.py
+++ b/src/ZODB/Connection.py
@@ -84,8 +84,8 @@
 ##############################################################################
 """Database connection support
 
-$Id: Connection.py,v 1.14 1999/07/07 10:58:47 jim Exp $"""
-__version__='$Revision: 1.14 $'[11:-2]
+$Id: Connection.py,v 1.15 1999/07/07 19:52:28 jim Exp $"""
+__version__='$Revision: 1.15 $'[11:-2]
 
 from cPickleCache import PickleCache
 from POSException import ConflictError, ExportError
@@ -402,31 +402,35 @@ class Connection(ExportImport.ExportImport):
 
     def setklassstate(self, object,
                       tt=type(()), ct=type(HelperClass)):
-        oid=object._p_oid
-        __traceback_info__=oid
-        p, serial = self._storage.load(oid, self._version)
-        file=StringIO(p)
-        unpickler=Unpickler(file)
-        unpickler.persistent_load=self._persistent_load
-
-        copy = unpickler.load()
-
-        klass, args = copy
-
-        if klass is not ExtensionKlass:
-            LOG('ZODB',ERROR,
-                "Unexpected klass when setting class state on %s"
-                % getattr(object,'__name__','(?)'))
-            return
-        
-        copy=apply(klass,args)
-        object.__dict__.clear()
-        object.__dict__.update(copy.__dict__)
-
-        object._p_oid=oid
-        object._p_jar=self
-        object._p_changed=None
-        object._p_serial=serial
+        try:
+            oid=object._p_oid
+            __traceback_info__=oid
+            p, serial = self._storage.load(oid, self._version)
+            file=StringIO(p)
+            unpickler=Unpickler(file)
+            unpickler.persistent_load=self._persistent_load
+    
+            copy = unpickler.load()
+    
+            klass, args = copy
+    
+            if klass is not ExtensionKlass:
+                LOG('ZODB',ERROR,
+                    "Unexpected klass when setting class state on %s"
+                    % getattr(object,'__name__','(?)'))
+                return
+            
+            copy=apply(klass,args)
+            object.__dict__.clear()
+            object.__dict__.update(copy.__dict__)
+    
+            object._p_oid=oid
+            object._p_jar=self
+            object._p_changed=0
+            object._p_serial=serial
+        except:
+            LOG('ZODB',ERROR, 'setklassstate failed', error=sys.exc_info)
+            raise
 
     def tpc_abort(self, transaction):
         self._storage.tpc_abort(transaction)
-- 
2.30.9