diff --git a/libguile/threads.c b/libguile/threads.c index 1721e0b28..e468f2fd5 100644 --- a/libguile/threads.c +++ b/libguile/threads.c @@ -1826,10 +1826,15 @@ scm_std_select (int nfds, int scm_pthread_mutex_lock (scm_i_pthread_mutex_t *mutex) { - scm_t_guile_ticket t = scm_leave_guile (); - int res = scm_i_pthread_mutex_lock (mutex); - scm_enter_guile (t); - return res; + if (scm_i_pthread_mutex_trylock (mutex) == 0) + return 0; + else + { + scm_t_guile_ticket t = scm_leave_guile (); + int res = scm_i_pthread_mutex_lock (mutex); + scm_enter_guile (t); + return res; + } } static void