Add #[must_use] to all guard types

This commit is contained in:
Ruihan Li
2024-06-30 23:46:56 +08:00
committed by Tate, Hongliang Tian
parent 9e4775d9e2
commit 57ecfa2fec
9 changed files with 19 additions and 6 deletions

View File

@ -122,7 +122,7 @@ impl<T> Producer<T> {
// Update the event of pollee in a critical region so that pollee // Update the event of pollee in a critical region so that pollee
// always reflects the _true_ state of the underlying ring buffer // always reflects the _true_ state of the underlying ring buffer
// regardless of any race conditions. // regardless of any race conditions.
self.0.common.lock_event(); let _guard = self.0.common.lock_event();
let rb = this_end.rb(); let rb = this_end.rb();
if rb.is_full() { if rb.is_full() {
@ -237,7 +237,7 @@ impl<T> Drop for Producer<T> {
fn drop(&mut self) { fn drop(&mut self) {
self.shutdown(); self.shutdown();
self.0.common.lock_event(); let _guard = self.0.common.lock_event();
// When reading from a channel such as a pipe or a stream socket, // When reading from a channel such as a pipe or a stream socket,
// POLLHUP merely indicates that the peer closed its end of the channel. // POLLHUP merely indicates that the peer closed its end of the channel.
@ -261,7 +261,7 @@ impl<T> Consumer<T> {
// Update the event of pollee in a critical region so that pollee // Update the event of pollee in a critical region so that pollee
// always reflects the _true_ state of the underlying ring buffer // always reflects the _true_ state of the underlying ring buffer
// regardless of any race conditions. // regardless of any race conditions.
self.0.common.lock_event(); let _guard = self.0.common.lock_event();
let rb = this_end.rb(); let rb = this_end.rb();
if rb.is_empty() { if rb.is_empty() {
@ -377,7 +377,7 @@ impl<T> Drop for Consumer<T> {
fn drop(&mut self) { fn drop(&mut self) {
self.shutdown(); self.shutdown();
self.0.common.lock_event(); let _guard = self.0.common.lock_event();
// POLLERR is also set for a file descriptor referring to the write end of a pipe // POLLERR is also set for a file descriptor referring to the write end of a pipe
// when the read end has been closed. // when the read end has been closed.

View File

@ -102,6 +102,8 @@ impl ProcessGroup {
/// A scoped lock for a process group. /// A scoped lock for a process group.
/// ///
/// It provides some public methods to prevent the exposure of the inner type. /// It provides some public methods to prevent the exposure of the inner type.
#[clippy::has_significant_drop]
#[must_use]
pub struct ProcessGroupGuard<'a> { pub struct ProcessGroupGuard<'a> {
inner: MutexGuard<'a, Inner>, inner: MutexGuard<'a, Inner>,
} }

View File

@ -92,6 +92,7 @@ unsafe impl<T: ?Sized + Send> Send for Mutex<T> {}
unsafe impl<T: ?Sized + Send> Sync for Mutex<T> {} unsafe impl<T: ?Sized + Send> Sync for Mutex<T> {}
#[clippy::has_significant_drop] #[clippy::has_significant_drop]
#[must_use]
pub struct MutexGuard_<T: ?Sized, R: Deref<Target = Mutex<T>>> { pub struct MutexGuard_<T: ?Sized, R: Deref<Target = Mutex<T>>> {
mutex: R, mutex: R,
} }

View File

@ -49,6 +49,8 @@ impl<P: OwnerPtr + Send> Rcu<P> {
} }
} }
#[clippy::has_significant_drop]
#[must_use]
pub struct RcuReadGuard<'a, P: OwnerPtr> { pub struct RcuReadGuard<'a, P: OwnerPtr> {
obj: &'a <P as OwnerPtr>::Target, obj: &'a <P as OwnerPtr>::Target,
rcu: &'a Rcu<P>, rcu: &'a Rcu<P>,

View File

@ -563,6 +563,8 @@ impl InnerGuard {
} }
/// A guard that provides immutable data access. /// A guard that provides immutable data access.
#[clippy::has_significant_drop]
#[must_use]
pub struct RwLockReadGuard_<T: ?Sized, R: Deref<Target = RwLock<T>> + Clone> { pub struct RwLockReadGuard_<T: ?Sized, R: Deref<Target = RwLock<T>> + Clone> {
inner_guard: InnerGuard, inner_guard: InnerGuard,
inner: R, inner: R,

View File

@ -248,6 +248,8 @@ impl<T: ?Sized, R: Deref<Target = RwMutex<T>>> Drop for RwMutexReadGuard_<T, R>
} }
/// A guard that provides mutable data access. /// A guard that provides mutable data access.
#[clippy::has_significant_drop]
#[must_use]
pub struct RwMutexWriteGuard_<T: ?Sized, R: Deref<Target = RwMutex<T>>> { pub struct RwMutexWriteGuard_<T: ?Sized, R: Deref<Target = RwMutex<T>>> {
inner: R, inner: R,
} }

View File

@ -145,6 +145,8 @@ pub type SpinLockGuard<'a, T> = SpinLockGuard_<T, &'a SpinLock<T>>;
pub type ArcSpinLockGuard<T> = SpinLockGuard_<T, Arc<SpinLock<T>>>; pub type ArcSpinLockGuard<T> = SpinLockGuard_<T, Arc<SpinLock<T>>>;
/// The guard of a spin lock that disables the local IRQs. /// The guard of a spin lock that disables the local IRQs.
#[clippy::has_significant_drop]
#[must_use]
pub struct SpinLockGuard_<T: ?Sized, R: Deref<Target = SpinLock<T>>> { pub struct SpinLockGuard_<T: ?Sized, R: Deref<Target = SpinLock<T>>> {
inner_guard: InnerGuard, inner_guard: InnerGuard,
lock: R, lock: R,

View File

@ -196,6 +196,8 @@ impl PreemptInfo {
} }
/// A guard for disable preempt. /// A guard for disable preempt.
#[clippy::has_significant_drop]
#[must_use]
pub struct DisablePreemptGuard { pub struct DisablePreemptGuard {
// This private field prevents user from constructing values of this type directly. // This private field prevents user from constructing values of this type directly.
private: (), private: (),
@ -223,7 +225,6 @@ impl Drop for DisablePreemptGuard {
} }
/// Disables preemption. /// Disables preemption.
#[must_use]
pub fn disable_preempt() -> DisablePreemptGuard { pub fn disable_preempt() -> DisablePreemptGuard {
DisablePreemptGuard::new() DisablePreemptGuard::new()
} }

View File

@ -126,12 +126,13 @@ impl Drop for IrqLine {
/// todo!("do something when irqs are disabled"); /// todo!("do something when irqs are disabled");
/// } /// }
/// ``` /// ```
#[must_use]
pub fn disable_local() -> DisabledLocalIrqGuard { pub fn disable_local() -> DisabledLocalIrqGuard {
DisabledLocalIrqGuard::new() DisabledLocalIrqGuard::new()
} }
/// A guard for disabled local IRQs. /// A guard for disabled local IRQs.
#[clippy::has_significant_drop]
#[must_use]
pub struct DisabledLocalIrqGuard { pub struct DisabledLocalIrqGuard {
was_enabled: bool, was_enabled: bool,
preempt_guard: DisablePreemptGuard, preempt_guard: DisablePreemptGuard,