Should not be using lock()/unlock() here (as that one eats an interrupt)
make exceptions narrower