diff options
author | Julian Graham <julian@transmetropolitan.(none)> | 2009-06-02 09:35:02 -0400 |
---|---|---|
committer | Julian Graham <julian@transmetropolitan.(none)> | 2009-06-02 09:35:02 -0400 |
commit | 2f9ae9b1040e1b9339bb0bc8b0013a5346622c44 (patch) | |
tree | 8dc3105cc05ddd5509edc4559a69d32d2acddfab /libguile/threads.c | |
parent | 922d417bf4a7c4eb7d956d340161ad6407545ae7 (diff) | |
parent | 938d46a35d39ec5d7b5fa858a8783136ce24d10d (diff) | |
download | guile-2f9ae9b1040e1b9339bb0bc8b0013a5346622c44.tar.gz |
Merge branch 'master' of git://git.savannah.gnu.org/guile
Diffstat (limited to 'libguile/threads.c')
-rw-r--r-- | libguile/threads.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/libguile/threads.c b/libguile/threads.c index bb874e230..d63c6197e 100644 --- a/libguile/threads.c +++ b/libguile/threads.c @@ -1161,6 +1161,16 @@ SCM_DEFINE (scm_join_thread_timed, "join-thread", 1, 2, 0, scm_i_pthread_mutex_unlock (&t->admin_mutex); SCM_TICK; scm_i_scm_pthread_mutex_lock (&t->admin_mutex); + + /* Check for exit again, since we just released and + reacquired the admin mutex, before the next block_self + call (which would block forever if t has already + exited). */ + if (t->exited) + { + res = t->result; + break; + } } } @@ -1491,6 +1501,7 @@ fat_mutex_unlock (SCM mutex, SCM cond, { if (relock) scm_lock_mutex_timed (mutex, SCM_UNDEFINED, owner); + t->block_asyncs--; break; } |