diff --git a/src/program.c b/src/program.c index 45fc459819d8860243cccf3b1b2183b1610cbddc..771a73aa325ff8ef21388abab08d6e9579096fff 100644 --- a/src/program.c +++ b/src/program.c @@ -54,8 +54,12 @@ static int lock_depth = 0; PMOD_EXPORT void lock_pike_compiler(void) { - while (lock_depth && (Pike_compiler_thread != th_self())) { - co_wait_interpreter(&Pike_compiler_cond); + if (lock_depth && (Pike_compiler_thread != th_self())) { + SWAP_OUT_CURRENT_THREAD(); + while (lock_depth && (Pike_compiler_thread != th_self())) { + co_wait_interpreter(&Pike_compiler_cond); + } + SWAP_IN_CURRENT_THREAD(); } lock_depth++; Pike_compiler_thread = th_self();