[Zodb-checkins] CVS: Packages/ZODB - utils.py:1.17.4.5

Tim Peters tim.one at comcast.net
Mon Aug 1 17:21:55 EDT 2005


Update of /cvs-repository/Packages/ZODB
In directory cvs.zope.org:/tmp/cvs-serv30839/ZODB

Modified Files:
      Tag: Zope-2_7-branch
	utils.py 
Log Message:
Replace trigger.py with ZODB 3.4's version.

This simplifies the code, and worms around suspected race bugs in
Microsoft's socket implementation.


=== Packages/ZODB/utils.py 1.17.4.4 => 1.17.4.5 ===
--- Packages/ZODB/utils.py:1.17.4.4	Sat Sep  4 00:45:03 2004
+++ Packages/ZODB/utils.py	Mon Aug  1 17:21:54 2005
@@ -15,6 +15,7 @@
 import sys, time
 from ZODB import TimeStamp
 
+import struct
 from struct import pack, unpack
 from types import StringType
 from binascii import hexlify
@@ -112,4 +113,23 @@
     result = tid_repr(tid)
     if isinstance(tid, StringType) and len(tid) == 8:
         result = "%s %s" % (result, TimeStamp.TimeStamp(tid))
+    return result
+
+# Addresses can "look negative" on some boxes, some of the time.  If you
+# feed a "negative address" to an %x format, Python 2.3 displays it as
+# unsigned, but produces a FutureWarning, because Python 2.4 will display
+# it as signed.  So when you want to prodce an address, use positive_id() to
+# obtain it.
+# _ADDRESS_MASK is 2**(number_of_bits_in_a_native_pointer).  Adding this to
+# a negative address gives a positive int with the same hex representation as
+# the significant bits in the original.
+
+_ADDRESS_MASK = 256 ** struct.calcsize('P')
+def positive_id(obj):
+    """Return id(obj) as a non-negative integer."""
+
+    result = id(obj)
+    if result < 0:
+        result += _ADDRESS_MASK
+        assert result > 0
     return result



More information about the Zodb-checkins mailing list