Browse Source

extmod/moduos_dupterm: Handle exceptions in call to dupterm's .write()

pull/1776/head
Paul Sokolovsky 9 years ago
parent
commit
467504da01
  1. 19
      extmod/moduos_dupterm.c

19
extmod/moduos_dupterm.c

@ -36,10 +36,21 @@
void mp_uos_dupterm_tx_strn(const char *str, size_t len) {
if (MP_STATE_PORT(term_obj) != MP_OBJ_NULL) {
mp_obj_t write_m[3];
mp_load_method(MP_STATE_PORT(term_obj), MP_QSTR_write, write_m);
write_m[2] = mp_obj_new_bytearray_by_ref(len, (char*)str);
mp_call_method_n_kw(1, 0, write_m);
nlr_buf_t nlr;
if (nlr_push(&nlr) == 0) {
mp_obj_t write_m[3];
mp_load_method(MP_STATE_PORT(term_obj), MP_QSTR_write, write_m);
write_m[2] = mp_obj_new_bytearray_by_ref(len, (char*)str);
mp_call_method_n_kw(1, 0, write_m);
nlr_pop();
} else {
// Temporarily disable dupterm to avoid infinite recursion
mp_obj_t save_term = MP_STATE_PORT(term_obj);
MP_STATE_PORT(term_obj) = NULL;
mp_printf(&mp_plat_print, "dupterm: ");
mp_obj_print_exception(&mp_plat_print, nlr.ret_val);
MP_STATE_PORT(term_obj) = save_term;
}
}
}

Loading…
Cancel
Save