Using sync locks in an async environment is a code smell, so the Rust code is bad right off the bat. Just stick with async locks and take the tiny performance hit unless you know exactly what you're doing.
replies(2):
He could have mem::dropped the lock 50 lines before the await point