Don't leave and reenter guile mode if mutex is available
authorKen Raeburn <raeburn@raeburn.org>
Wed, 26 Aug 2009 22:30:59 +0000 (23:30 +0100)
committerNeil Jerram <neil@ossau.uklinux.net>
Wed, 26 Aug 2009 22:36:19 +0000 (23:36 +0100)
commit71a5964c110bea93ac926331547c25bdff67ce23
tree3e5286a08863c0136d72553840b0b5b23a4dd52e
parenta66480374ed6dfc2d012c6df39c1382ba87ed9d0
Don't leave and reenter guile mode if mutex is available

On Aug 5, 2009, at 10:06, Ken Raeburn wrote:
> (1) In scm_pthread_mutex_lock, we leave and re-enter guile mode so
> that we don't block the thread while in guile mode.  But we could
> use pthread_mutex_trylock first, and avoid the costs scm_leave_guile
> seems to incur on the Mac.  If we can't acquire the lock, it should
> return immediately, and then we can do the expensive, blocking
> version.  A quick, hack version of this changed my run time for
> A(3,8) from 17.5s to 14.5s, saving about 17%; sigaltstack and
> sigprocmask are still in the picture, because they're called from
> scm_catch_with_pre_unwind_handler.  I'll work up a nicer patch
> later.

Ah, we already had scm_i_pthread_mutex_trylock lying around; that made
things easy.
A second timing test with A(3,9) and this version of the patch (based
on 1.9.1) shows the same improvement.

* libguile/threads.c (scm_pthread_mutex_lock): Try the mutex before
  leaving and reentering guile mode.
libguile/threads.c