[Python-3000] uuid creation not thread-safe? (original) (raw)
Guido van Rossum guido at python.org
Fri Jul 20 19:52:14 CEST 2007
- Previous message: [Python-3000] Fwd: Re: pep 3124 plans
- Next message: [Python-3000] uuid creation not thread-safe?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
I discovered what appears to be a thread-unsafety in uuid.py. This is in the trunk as well as in 3.x; I'm using the trunk here for easy reference. There's some code around like 395:
import ctypes, ctypes.util
_buffer = ctypes.create_string_buffer(16)
This creates a global buffer which is used as the output parameter to later calls to _uuid_generate_random() and _uuid_generate_time(). For example, around line 481, in uuid1():
_uuid_generate_time(_buffer)
return UUID(bytes=_buffer.raw)
Clearly if two threads do this simultaneously they are overwriting _buffer in unpredictable order. There are a few other occurrences of this too.
I find it somewhat disturbing that what seems a fairly innocent function that doesn't appear to have global state is nevertheless not thread-safe. Would it be wise to fix this, e.g. by allocating a fresh output buffer inside uuid1() and other callers?
-- --Guido van Rossum (home page: http://www.python.org/~guido/)
- Previous message: [Python-3000] Fwd: Re: pep 3124 plans
- Next message: [Python-3000] uuid creation not thread-safe?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]