[Checkins] SVN: zodbcode/trunk/src/zodbcode/ func_globals of
	persistent function which has side effect must
    Yusei Tahara 
    yusei at domen.cx
       
    Thu Feb  7 18:14:06 EST 2008
    
    
  
Log message for revision 83656:
  func_globals of persistent function which has side effect must
  synchronize with persistent module's dict at any time.
  
Changed:
  U   zodbcode/trunk/src/zodbcode/module.py
  U   zodbcode/trunk/src/zodbcode/tests/test_module.py
-=-
Modified: zodbcode/trunk/src/zodbcode/module.py
===================================================================
--- zodbcode/trunk/src/zodbcode/module.py	2008-02-07 21:22:59 UTC (rev 83655)
+++ zodbcode/trunk/src/zodbcode/module.py	2008-02-07 23:14:05 UTC (rev 83656)
@@ -83,6 +83,14 @@
         state["__builtins__"] = __builtin__
         self.__dict__.update(state)
 
+    def _p_invalidate(self):
+        for i in self.__dict__.itervalues():
+            if (i is not self and
+                getattr(i, '_v_side_effect', False) is True and
+                i._p_state!=GHOST):
+                i._p_invalidate()
+        Persistent._p_invalidate(self)
+
 class PersistentPackage(PersistentModule):
     # XXX Is it okay that these packages don't have __path__?
 
Modified: zodbcode/trunk/src/zodbcode/tests/test_module.py
===================================================================
--- zodbcode/trunk/src/zodbcode/tests/test_module.py	2008-02-07 21:22:59 UTC (rev 83655)
+++ zodbcode/trunk/src/zodbcode/tests/test_module.py	2008-02-07 23:14:05 UTC (rev 83656)
@@ -223,8 +223,15 @@
         import effect
         effect.inc()
         transaction.commit()
-        effect.inc()
+        old_value = effect.x
+        return_value = effect.inc()
         self.assert_(effect._p_changed)
+        self.assertEqual(return_value, effect.x)
+        self.assert_(old_value < effect.x)
+        transaction.abort()
+        self.assertEqual(old_value, effect.x)
+        self.assertEqual(return_value, effect.inc())
+        self.assertEqual(return_value, effect.x)
         self.useNewConnection()
 
     def testBuiltins(self):
    
    
More information about the Checkins
mailing list