Skip to content

Commit d556403

Browse files
committed
Halt to enforce reboot limit once only
The pre-main check of error_reboot_count was applied repeatedly on every boot, meaning that once the reboot limit was hit, every subsequent reset would halt before main, until something managed to clear or corrupt the error context. Set the is_error_processed flag before halting, so that when an external agent resets us while we're halted, we do not report the error and halt again.
1 parent a4ed473 commit d556403

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

platform/mbed_error.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -218,15 +218,16 @@ mbed_error_status_t mbed_error_initialize(void)
218218
//We let the callback reset the error info, so check if its still valid and do the rest only if its still valid.
219219
if (report_error_ctx->error_reboot_count > 0) {
220220

221+
report_error_ctx->is_error_processed = 1;//Set the flag that we already processed this error
222+
crc_val = compute_crc32(report_error_ctx, offsetof(mbed_error_ctx, crc_error_ctx));
223+
report_error_ctx->crc_error_ctx = crc_val;
224+
221225
//Enforce max-reboot only if auto reboot is enabled
222226
#if MBED_CONF_PLATFORM_FATAL_ERROR_AUTO_REBOOT_ENABLED
223227
if (report_error_ctx->error_reboot_count >= MBED_CONF_PLATFORM_ERROR_REBOOT_MAX) {
224228
mbed_halt_system();
225229
}
226230
#endif
227-
report_error_ctx->is_error_processed = 1;//Set the flag that we already processed this error
228-
crc_val = compute_crc32(report_error_ctx, offsetof(mbed_error_ctx, crc_error_ctx));
229-
report_error_ctx->crc_error_ctx = crc_val;
230231
}
231232
}
232233
}

0 commit comments

Comments
 (0)