summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/library/_thread.rst3
-rw-r--r--Lib/test/test_threading.py4
-rw-r--r--Misc/NEWS4
-rw-r--r--Modules/_threadmodule.c4
4 files changed, 14 insertions, 1 deletions
diff --git a/Doc/library/_thread.rst b/Doc/library/_thread.rst
index 369e9cd..e7e7504 100644
--- a/Doc/library/_thread.rst
+++ b/Doc/library/_thread.rst
@@ -35,6 +35,9 @@ It defines the following constants and functions:
Raised on thread-specific errors.
+ .. versionchanged:: 3.3
+ This is now a synonym of the built-in :exc:`RuntimeError`.
+
.. data:: LockType
diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
index 13a428d..029218d 100644
--- a/Lib/test/test_threading.py
+++ b/Lib/test/test_threading.py
@@ -685,6 +685,10 @@ class ThreadingExceptionTests(BaseTestCase):
thread.start()
self.assertRaises(RuntimeError, setattr, thread, "daemon", True)
+ def test_releasing_unacquired_lock(self):
+ lock = threading.Lock()
+ self.assertRaises(RuntimeError, lock.release)
+
class LockTests(lock_tests.LockTests):
locktype = staticmethod(threading.Lock)
diff --git a/Misc/NEWS b/Misc/NEWS
index cad8eda..a7f162d 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -35,6 +35,10 @@ Core and Builtins
Library
-------
+- Issue #11140: Lock.release() now raises a RuntimeError when attempting
+ to release an unacquired lock, as claimed in the threading documentation.
+ The _thread.error exception is now an alias of RuntimeError.
+
- Issue 8594: ftplib now provides a source_address parameter to specify which
(address, port) to bind to before connecting.
diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c
index 2d3be5d..14ed55e 100644
--- a/Modules/_threadmodule.c
+++ b/Modules/_threadmodule.c
@@ -1308,7 +1308,9 @@ PyInit__thread(void)
/* Add a symbolic constant */
d = PyModule_GetDict(m);
- ThreadError = PyErr_NewException("_thread.error", NULL, NULL);
+ ThreadError = PyExc_RuntimeError;
+ Py_INCREF(ThreadError);
+
PyDict_SetItemString(d, "error", ThreadError);
Locktype.tp_doc = lock_doc;
Py_INCREF(&Locktype);