diff --git a/sys/ddb/db_command.c b/sys/ddb/db_command.c index c5c0022c9bb..effb5f0dfa2 100644 --- a/sys/ddb/db_command.c +++ b/sys/ddb/db_command.c @@ -556,7 +556,7 @@ db_error(const char *s) if (s) db_printf("%s", s); db_flush_lex(); - kdb_reenter(); + kdb_reenter_silent(); } static void diff --git a/sys/kern/subr_kdb.c b/sys/kern/subr_kdb.c index ec168590e0e..1382af32d1d 100644 --- a/sys/kern/subr_kdb.c +++ b/sys/kern/subr_kdb.c @@ -509,6 +509,17 @@ kdb_reenter(void) /* NOTREACHED */ } +void +kdb_reenter_silent(void) +{ + + if (!kdb_active || kdb_jmpbufp == NULL) + return; + + longjmp(kdb_jmpbufp, 1); + /* NOTREACHED */ +} + /* * Thread related support functions. */ diff --git a/sys/sys/kdb.h b/sys/sys/kdb.h index d84b8b9956f..d1f352fcb83 100644 --- a/sys/sys/kdb.h +++ b/sys/sys/kdb.h @@ -80,6 +80,7 @@ void * kdb_jmpbuf(jmp_buf); void kdb_panic(const char *); void kdb_reboot(void); void kdb_reenter(void); +void kdb_reenter_silent(void); struct pcb *kdb_thr_ctx(struct thread *); struct thread *kdb_thr_first(void); struct thread *kdb_thr_from_pid(pid_t);