if this throws, try to roll back before we exit commit(), because commit() is in the read lock