Между unsavedChanges и взятием writeLock может произойти какое-нибудь изменение (например, другой коммит), и количество изменений может измениться.