summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Dörre <felix@dogcraft.de>2024-02-24 23:44:47 +0000
committerDamien George <damien@micropython.org>2024-03-16 10:59:03 +1100
commit01c31ea804c7e2a034e1249b43c30673b4382116 (patch)
tree4c3629a51befdb343e400a3f5be18e5b56214220
parentfb3820e3d62d284472420c68828a6b6443265b61 (diff)
extmod/os_dupterm: Handle exception properly when it occurs in parallel.
When an exception is handled and the stream is closed, but while this happens, another exception occurs or dupterm is deactivated for another reason, the initial deactivation crashes, because its dupterm is removed. Co-authored-by: Damien George <damien@micropython.org> Signed-off-by: Felix Dörre <felix@dogcraft.de>
-rw-r--r--extmod/os_dupterm.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/extmod/os_dupterm.c b/extmod/os_dupterm.c
index 156766a43..399f2237f 100644
--- a/extmod/os_dupterm.c
+++ b/extmod/os_dupterm.c
@@ -45,6 +45,10 @@ void mp_os_deactivate(size_t dupterm_idx, const char *msg, mp_obj_t exc) {
if (exc != MP_OBJ_NULL) {
mp_obj_print_exception(&mp_plat_print, exc);
}
+ if (term == MP_OBJ_NULL) {
+ // Dupterm was already closed.
+ return;
+ }
nlr_buf_t nlr;
if (nlr_push(&nlr) == 0) {
mp_stream_close(term);