summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--py/modthread.c4
-rw-r--r--tests/thread/thread_lock1.py6
2 files changed, 9 insertions, 1 deletions
diff --git a/py/modthread.c b/py/modthread.c
index d0e71dad3b..1d76027893 100644
--- a/py/modthread.c
+++ b/py/modthread.c
@@ -84,7 +84,9 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(thread_lock_acquire_obj, 1, 3, thread
STATIC mp_obj_t thread_lock_release(mp_obj_t self_in) {
mp_obj_thread_lock_t *self = MP_OBJ_TO_PTR(self_in);
- // TODO check if already unlocked
+ if (!self->locked) {
+ mp_raise_msg(&mp_type_RuntimeError, NULL);
+ }
self->locked = false;
MP_THREAD_GIL_EXIT();
mp_thread_mutex_unlock(&self->mutex);
diff --git a/tests/thread/thread_lock1.py b/tests/thread/thread_lock1.py
index ca585ffbb9..ba5c7dff06 100644
--- a/tests/thread/thread_lock1.py
+++ b/tests/thread/thread_lock1.py
@@ -38,3 +38,9 @@ try:
except KeyError:
print('KeyError')
print(lock.locked())
+
+# test that we can't release an unlocked lock
+try:
+ lock.release()
+except RuntimeError:
+ print('RuntimeError')