diff options
author | Daniel Kraft <d@domob.eu> | 2009-08-27 19:26:04 +0200 |
---|---|---|
committer | Daniel Kraft <d@domob.eu> | 2009-08-27 19:26:04 +0200 |
commit | ff810079188b8d04224959d5b54254d3e142d6c3 (patch) | |
tree | a58a203dd1a4f151ee8730c5a8290b0c36c2a04e /libguile/threads.c | |
parent | 9a9f123144c179ef659252d3442117d6b774be7f (diff) | |
parent | fa316af70ff11767d9a8eb971d9e0b888152a15c (diff) | |
download | guile-ff810079188b8d04224959d5b54254d3e142d6c3.tar.gz |
Merge branch 'master' of git://git.savannah.gnu.org/guile into elisp
Diffstat (limited to 'libguile/threads.c')
-rw-r--r-- | libguile/threads.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/libguile/threads.c b/libguile/threads.c index 9589336c1..e468f2fd5 100644 --- a/libguile/threads.c +++ b/libguile/threads.c @@ -312,7 +312,7 @@ unblock_from_queue (SCM queue) var 't' // save registers. SCM_FLUSH_REGISTER_WINDOWS; // sparc only - setjmp (t->regs); // here's most of the magic + SCM_I_SETJMP (t->regs); // here's most of the magic ... and returns. @@ -366,7 +366,7 @@ unblock_from_queue (SCM queue) t->top = SCM_STACK_PTR (&t); // save registers. SCM_FLUSH_REGISTER_WINDOWS; - setjmp (t->regs); + SCM_I_SETJMP (t->regs); res = func(data); scm_enter_guile (t); @@ -425,7 +425,7 @@ suspend (void) t->top = SCM_STACK_PTR (&t); /* save registers. */ SCM_FLUSH_REGISTER_WINDOWS; - setjmp (t->regs); + SCM_I_SETJMP (t->regs); return t; } @@ -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 |