diff --git a/generate/templates/manual/src/lock_master.cc b/generate/templates/manual/src/lock_master.cc index f59145b33..d7d8239f5 100644 --- a/generate/templates/manual/src/lock_master.cc +++ b/generate/templates/manual/src/lock_master.cc @@ -188,9 +188,13 @@ void LockMasterImpl::Lock(bool acquireMutexes) { } void LockMasterImpl::Unlock(bool releaseMutexes) { - std::vector objectMutexes = GetMutexes(releaseMutexes * -1); + // Get the mutexes but don't decrement their use count until after we've + // unlocked them all. + std::vector objectMutexes = GetMutexes(0); std::for_each(objectMutexes.begin(), objectMutexes.end(), uv_mutex_unlock); + + GetMutexes(releaseMutexes * -1); } void LockMasterImpl::CleanupMutexes() {