diff --git a/sys/kern/kern_ktrace.c b/sys/kern/kern_ktrace.c index 036f29fa41d3..e611f2b812f7 100644 --- a/sys/kern/kern_ktrace.c +++ b/sys/kern/kern_ktrace.c @@ -176,16 +176,19 @@ static void ktd_wakeup(struct ktr_desc *ktd) { - callout_stop(&ktd->ktd_wakch); - cv_signal(&ktd->ktd_cv); + KASSERT(mutex_owned(&ktrace_lock)); + + if (!callout_halt(&ktd->ktd_wakch, &ktrace_lock)) + cv_signal(&ktd->ktd_cv); } static void ktd_callout(void *arg) { + struct ktr_desc *ktd = arg; mutex_enter(&ktrace_lock); - ktd_wakeup(arg); + cv_signal(&ktd->ktd_cv); mutex_exit(&ktrace_lock); }