I'm going to fix this soon (#5). I talked to a couple GCD engineers at WWDC and we came up with a better way to do this that doesn't require a recursive lock and is less likely to cause a race condition.