Your patch does solve this issue, but I'm not 100% why the problem occurs in the first place, as the lock should have been unlocked when the throw occurred.
If I catch the wrong type error explicitly, then there is no problem. scheme@(guile-user)> (catch #t (lambda () (strerror 1.5)) list) $1 = (wrong-type-arg #f "Wrong type (expecting ~A): ~S" ("exact integer" 1.5) (1.5)) My thinking is that the a pre-unwind handler in the repl tries to lock the same mutex, but I haven't looked into this deeply enough. -- Ian Price -- shift-reset.com "Programming is like pinball. The reward for doing it well is the opportunity to do it again" - from "The Wizardy Compiled"