[Warning] Weird Zope behaviour: int(1200 * 0.20000000000000001) or 1 == -2147483648
ZopeCVS (trunk) from 9.1.2002; Python 2.1.1; Linux 2 I just met really strange behaviour: For testing purposes, I did: export ZODB_READ_ONLY=1 python >>> import Zope This lead to a deadlock in "ThreadLock.acquire". I ran the process in GDB with breakpoints in "ThreadLock.acquire" and "ThreadLock.release". After a while, I get an exception:
File "/home/dieter/Haufe/src/Zope/lib/python/Zope/__init__.py", line 77, in ? OFS.Application.initialize(c) File "/home/dieter/Haufe/src/Zope/lib/python/OFS/Application.py", line 316, in initialize delNotification = delnotify, limit=limit) File "/home/dieter/Haufe/src/Zope/lib/python/Products/Transience/Transience.py", line 114, in __init__ self._reset() File "/home/dieter/Haufe/src/Zope/lib/python/Products/Transience/Transience.py", line 334, in _reset self._ring = Ring(l, index) File "/home/dieter/Haufe/src/Zope/lib/python/Products/Transience/Transience.py", line 479, in __init__ raise "ring must have at least one element" ring must have at least one element
Analysis reveals, that in "_reset" we have:
(Pdb) p vars(self) {'_err_margin': 0.20000000000000001, 'id': 'session_data', '_delCallback': None, 'title': 'Session Data Container', '_timeout_secs': 1200, '_limit': 1000, '_addCallback': None, '_resolution_secs': -2147483648}
"_resolution_secs" is severely wrong! It was computed by:
t_secs = self._timeout_secs r_secs = self._resolution_secs = int(t_secs * self._err_margin) or 1
and the result should have been "240" which I get, when I evaluate the expression in "pdb". Some serious bug is lingering here. I expect a memory corruption. Dieter
participants (1)
-
Dieter Maurer