diff options
| author | Felix Dörre <felix@dogcraft.de> | 2024-02-24 23:44:47 +0000 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2024-03-16 10:59:03 +1100 |
| commit | 01c31ea804c7e2a034e1249b43c30673b4382116 (patch) | |
| tree | 4c3629a51befdb343e400a3f5be18e5b56214220 | |
| parent | fb3820e3d62d284472420c68828a6b6443265b61 (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.c | 4 |
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); |
