fix(crop): rotatie op Windows landt weer, en een mislukte schrijfbeurt wist niets meer #1776
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!1776
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/rotatie-windows-handle"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
De reden, eindelijk
De diagnose uit #1774 leverde bij de eerstvolgende spiegel-run precies wat ontbrak:
De voorvertoning van het bijsnijdvenster houdt het bestand dat ze net las nog even vast. Op Windows weigert
renameover een bestaand bestand, waarna de terugval het doel wil verwijderen — en verwijderen mag niet zolang iemand het openhoudt. Die iemand waren wij. Dit is een echte gebruikersbug: wie op Windows een afbeelding draait die in beeld staat, raakt zijn rotatie kwijt zonder melding.Drie dingen
_releasePreview()geeft de stream en de plek in de beeldcache op vóór het schrijven. Synchroon: voor eenFileImageis de sleutel eenSynchronousFuture, dus de dialoog hoeft niet op IO te wachten om te kunnen sluiten — dat was het uitgangspunt van het oorspronkelijke ontwerp en dat blijft zo.writeBytesAtomicSyncRetrying: vier herkansingen van 40 ms. Blokkerend en niet async, omdat de houder een ánder proces is (op een Windows-bouwmachine klassiek de virusscanner) en eenawaithet venster op schijf-IO zou laten wachten.catchóók het tijdelijke bestand weg. Een schrijfbeurt die daar strandde liet niets over — geen nieuw bestand en geen origineel. Het commentaar beloofde het tegendeel ("de geschreven.tmpoverleeft"), en dat klopte alleen bij een crash, niet bij een uitzondering. De kopie blijft nu staan zodra het doel verwijderd is, en de herkansingslus ruimt hem op zodra een poging alsnog slaagt — anders bleef er eenfoto.png.3.tmpnaast het beeld van de gebruiker liggen. Dezelfde reparatie in de asynchrone variant, want dat is de route waarlangs decks worden opgeslagen.Toetsing
make checkgroen (exit 0).test/atomic_file_test.dartmet een geïnjecteerde hernoeming, dus ze worden rood zónder Windows: de tijdelijke vergrendeling die wordt uitgezeten (drie hernoemingen, één pauze) en de blijvende die gooit en de herstelkopie achterlaat.Bewaker
Overgeslagen, expliciet: geen formaat, opslag, afhankelijkheid of publieke belofte. Wel raakt punt 3 gegevensbehoud in de schrijfroute van decks, en dat gaat de goede kant op: van "kan alles kwijtraken" naar "laat een herstelbestand achter".