diff options
author | Damien George <damien.p.george@gmail.com> | 2017-06-14 14:43:50 +1000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2017-06-14 14:43:50 +1000 |
commit | e374cfff80c37b96b03d4438e475e405b03e6d61 (patch) | |
tree | d9c71b8cb37d3ce11eecaa4bbee81923d66e955e | |
parent | a47b8711316a4901bc81e1c46ce50de00207c47f (diff) | |
download | micropython-e374cfff80c37b96b03d4438e475e405b03e6d61.tar.gz micropython-e374cfff80c37b96b03d4438e475e405b03e6d61.zip |
py/modthread: Raise RuntimeError in release() if lock is not acquired.
-rw-r--r-- | py/modthread.c | 4 | ||||
-rw-r--r-- | tests/thread/thread_lock1.py | 6 |
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') |