The C function used by uuid.uuid4 is broken on

OSX 10.6 in that after os.fork() the parent and
child generate the same sequence of UUIDs.

This patch falls back to the the Python implementation
on OSX 10.6 or later.

Fixes issue #8621.
This commit is contained in:
Ronald Oussoren 2010-05-05 14:48:37 +00:00
parent 9b90f7af49
commit 3320696371
3 changed files with 44 additions and 0 deletions

View file

@ -446,6 +446,34 @@ class TestUUID(TestCase):
equal(u, uuid.UUID(v))
equal(str(u), v)
def testIssue8621(self):
import os
import sys
if os.name != 'posix':
return
# On at least some versions of OSX uuid.uuid4 generates
# the same sequence of UUIDs in the parent and any
# children started using fork.
fds = os.pipe()
pid = os.fork()
if pid == 0:
os.close(fds[0])
value = uuid.uuid4()
os.write(fds[1], value.hex)
sys.exit(0)
else:
os.close(fds[1])
parent_value = uuid.uuid4().hex
os.waitpid(pid, 0)
child_value = os.read(fds[0], 100)
self.assertNotEqual(parent_value, child_value)
def test_main():
test_support.run_unittest(TestUUID)