diff --git a/src/c/threads/condition_variable.d b/src/c/threads/condition_variable.d index 9de49dc08..efec08546 100644 --- a/src/c/threads/condition_variable.d +++ b/src/c/threads/condition_variable.d @@ -74,7 +74,7 @@ mp_condition_variable_wait(cl_object cv, cl_object lock) } env->own_process->process.waiting_for = cv; mp_giveup_lock(cv->condition_variable.lock = lock); - ecl_wait_on(condition_variable_wait, cv); + ecl_wait_on(env, condition_variable_wait, cv); @(return Ct) } diff --git a/src/c/threads/mutex.d b/src/c/threads/mutex.d index 0a1edeeb6..f1f9db6fb 100644 --- a/src/c/threads/mutex.d +++ b/src/c/threads/mutex.d @@ -161,7 +161,7 @@ mp_get_lock_wait(cl_object lock) FEerror_not_a_lock(lock); } if (lock->lock.queue_list != Cnil || get_lock_inner(env, lock) == Cnil) { - ecl_wait_on(get_lock_inner, lock); + ecl_wait_on(env, get_lock_inner, lock); } @(return Ct) } diff --git a/src/c/threads/queue.d b/src/c/threads/queue.d index 1a3b0c0e5..491436dd3 100644 --- a/src/c/threads/queue.d +++ b/src/c/threads/queue.d @@ -123,9 +123,9 @@ waiting_time(cl_index iteration, struct ecl_timeval *start) } static void -ecl_wait_on_timed(cl_object (*condition)(cl_env_ptr, cl_object), cl_object o) +ecl_wait_on_timed(cl_env_ptr env, cl_object (*condition)(cl_env_ptr, cl_object), cl_object o) { - volatile const cl_env_ptr the_env = ecl_process_env(); + volatile const cl_env_ptr the_env = env; volatile cl_object own_process = the_env->own_process; volatile cl_object record; cl_fixnum iteration = 0; @@ -181,10 +181,10 @@ ecl_wait_on_timed(cl_object (*condition)(cl_env_ptr, cl_object), cl_object o) void -ecl_wait_on(cl_object (*condition)(cl_env_ptr, cl_object), cl_object o) +ecl_wait_on(cl_env_ptr env, cl_object (*condition)(cl_env_ptr, cl_object), cl_object o) { #if defined(HAVE_SIGPROCMASK) - volatile const cl_env_ptr the_env = ecl_process_env(); + volatile const cl_env_ptr the_env = env; volatile cl_object own_process = the_env->own_process; volatile cl_object record; volatile sigset_t original; @@ -253,7 +253,7 @@ ecl_wait_on(cl_object (*condition)(cl_env_ptr, cl_object), cl_object o) } } CL_UNWIND_PROTECT_END; #else - ecl_wait_on_timed(condition, o); + ecl_wait_on_timed(env, condition, o); #endif } diff --git a/src/h/internal.h b/src/h/internal.h index 04e113024..53c97475f 100644 --- a/src/h/internal.h +++ b/src/h/internal.h @@ -471,7 +471,7 @@ extern void print_lock(char *s, cl_object lock, ...); extern void ecl_get_spinlock(cl_env_ptr env, cl_object *lock); extern void ecl_giveup_spinlock(cl_object *lock); -extern void ecl_wait_on(cl_object (*condition)(cl_env_ptr, cl_object), cl_object o); +extern void ecl_wait_on(cl_env_ptr env, cl_object (*condition)(cl_env_ptr, cl_object), cl_object o); extern void ecl_wakeup_waiters(cl_env_ptr the_env, cl_object o, bool all); #endif