diff --git a/src/add-ons/kernel/debugger/invalidate_on_exit/Jamfile b/src/add-ons/kernel/debugger/invalidate_on_exit/Jamfile index f85c86dde6..ef5c955255 100644 --- a/src/add-ons/kernel/debugger/invalidate_on_exit/Jamfile +++ b/src/add-ons/kernel/debugger/invalidate_on_exit/Jamfile @@ -1,7 +1,7 @@ SubDir HAIKU_TOP src add-ons kernel debugger invalidate_on_exit ; -UsePrivateHeaders kernel ; +UsePrivateKernelHeaders ; KernelAddon invalidate_on_exit : invalidate_on_exit.cpp - ; +; diff --git a/src/add-ons/kernel/debugger/invalidate_on_exit/invalidate_on_exit.cpp b/src/add-ons/kernel/debugger/invalidate_on_exit/invalidate_on_exit.cpp index 189247c348..3ff72b3842 100644 --- a/src/add-ons/kernel/debugger/invalidate_on_exit/invalidate_on_exit.cpp +++ b/src/add-ons/kernel/debugger/invalidate_on_exit/invalidate_on_exit.cpp @@ -2,9 +2,15 @@ * Copyright 2008, Michael Lotz, mmlr@mlotz.ch * Distributed under the terms of the MIT License. */ + + #include + #include +#include +#include + static sem_id sRequestSem = -1; @@ -33,6 +39,12 @@ invalidate_loop(void *data) static void exit_debugger() { + // If someone holds the scheduler lock at this point, release_sem_etc() + // will block forever. So avoid that. + if (!try_acquire_spinlock(&gSchedulerLock)) + return; + release_spinlock(&gSchedulerLock); + release_sem_etc(sRequestSem, 1, B_DO_NOT_RESCHEDULE); }