Breaking Opportunistic Locks
Das Unterbrechen einer opportunistischen Sperre ist der Prozess, bei dem die Sperre, die ein Client für eine Datei hat, herabgestuft wird, sodass ein anderer Client die Datei mit oder ohne opportunistische Sperre öffnen kann. Wenn der andere Client den geöffneten Vorgang anfordert, verzögert der Server den Geöffneten Vorgang und benachrichtigt den Client, der die opportunistische Sperre hält.
Der Client, der die Sperre hält, führt dann aktionen aus, die dem Typ der Sperre entsprechen, z. B. das Aufgeben von Lesepuffern, das Schließen der Datei usw. Nur wenn der Client, der die opportunistische Sperre hält, den Server benachrichtigt, dass dies geschehen ist, öffnet der Server die Datei für den Client, der den geöffneten Vorgang anfordert. Wenn jedoch eine Sperre der Ebene 2 unterbrochen ist, meldet der Server dem Client, dass sie unterbrochen wurde, wartet jedoch nicht auf eine Bestätigung, da keine zwischengespeicherten Daten auf dem Server geleert werden müssen.
Bei der Bestätigung eines Umbruchs einer exklusiven Sperre (Filter, Ebene 1 oder Batch) kann der Besitzer einer fehlerhaften Sperre keine weitere exklusive Sperre anfordern. Es kann eine exklusive Sperre auf eine Sperre der Stufe 2 oder gar keine Sperre herabstufen. Der Besitzer gibt in der Regel die Sperre auf und schließt die Datei, wenn er die Datei trotzdem schließen möchte.
Anwendungen werden benachrichtigt, dass eine opportunistische Sperre unterbrochen wird, indem sie das hEvent-Element der OVERLAPPED-Struktur verwenden, die der Datei zugeordnet ist, für die die Sperre unterbrochen ist. Anwendungen können auch Funktionen wie GetOverlappedResult und HasOverlappedIoCompleted verwenden.