summaryrefslogtreecommitdiffstats
path: root/Lib/_threading_local.py
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2010-08-28 18:17:03 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2010-08-28 18:17:03 (GMT)
commit1a9a9d543327397396827642895410183f8902d5 (patch)
tree56ded308662fe5b0a410edef287cb23133ccc574 /Lib/_threading_local.py
parent64a38c0eb5b7fd6e4ee5f3e912cff9eda8dd19af (diff)
downloadcpython-1a9a9d543327397396827642895410183f8902d5.zip
cpython-1a9a9d543327397396827642895410183f8902d5.tar.gz
cpython-1a9a9d543327397396827642895410183f8902d5.tar.bz2
Issue #1868: Eliminate subtle timing issues in thread-local objects by
getting rid of the cached copy of thread-local attribute dictionary.
Diffstat (limited to 'Lib/_threading_local.py')
-rw-r--r--Lib/_threading_local.py8
1 files changed, 8 insertions, 0 deletions
diff --git a/Lib/_threading_local.py b/Lib/_threading_local.py
index b0edc03..3af7807 100644
--- a/Lib/_threading_local.py
+++ b/Lib/_threading_local.py
@@ -194,6 +194,10 @@ class local(_localbase):
lock.release()
def __setattr__(self, name, value):
+ if name == '__dict__':
+ raise AttributeError(
+ "%r object attribute '__dict__' is read-only"
+ % self.__class__.__name__)
lock = object.__getattribute__(self, '_local__lock')
lock.acquire()
try:
@@ -203,6 +207,10 @@ class local(_localbase):
lock.release()
def __delattr__(self, name):
+ if name == '__dict__':
+ raise AttributeError(
+ "%r object attribute '__dict__' is read-only"
+ % self.__class__.__name__)
lock = object.__getattribute__(self, '_local__lock')
lock.acquire()
try: