Implement SMB Oplocks Phase 1-2
Phase 1: Data structures - Add oplock_level and share_access fields to Open struct - Update Open::new() signature with new parameters - Update handlers/create.rs to pass oplock params Phase 2: OplockManager - Create oplock.rs with OplockManager struct - OplockEntry for tracking per-client oplock state - can_grant() - check ShareAccess compatibility - register() / unregister() - lifecycle management - break_oplock() - generate OPLOCK_BREAK_NOTIFICATION - Add OplockManager to ServerState - Add Hash trait to SmbPath for HashMap key All 229 tests pass.
This commit is contained in:
Vendored
+3
@@ -196,6 +196,8 @@ pub struct ServerState {
|
||||
/// iteration and connection loops abandon their next read.
|
||||
pub shutdown: Arc<Notify>,
|
||||
pub shutting_down: Arc<AtomicBool>,
|
||||
/// Global oplock state manager (Phase 2).
|
||||
pub oplock_manager: Arc<crate::oplock::OplockManager>,
|
||||
}
|
||||
|
||||
impl ServerState {
|
||||
@@ -208,6 +210,7 @@ impl ServerState {
|
||||
server_start_filetime: now_filetime(),
|
||||
shutdown: Arc::new(Notify::new()),
|
||||
shutting_down: Arc::new(AtomicBool::new(false)),
|
||||
oplock_manager: Arc::new(crate::oplock::OplockManager::new()),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user