Closed
Description
Summary
I've hit a false positive, or at least a bad suggestion, with the significant-drop-tightening
lint where a mutex is used in two locations, but Clippy's suggestion doesn't consider the second usage of the locked value.
Initially reported in #9399 (comment).
/cc @c410-f3r
Lint Name
significant-drop-tightening
Reproducer
The related code:
https://github.com/Thomasdezeeuw/heph/blob/8725fe9ed871f135b7ab87b5969eb1213121a242/inbox/src/lib.rs#L523-L529
For which Clippy suggests:
error: temporary with significant `Drop` can be early dropped
--> inbox/src/lib.rs:523:21
|
522 | if let Some(waker) = self.registered_waker.take() {
| ___________________________________________________________-
523 | | let mut sender_wakers = self.channel.sender_wakers.lock().unwrap();
| | ^^^^^^^^^^^^^
524 | | let idx = sender_wakers.iter().position(|w| w.will_wake(&waker));
525 | | if let Some(idx) = idx {
... |
529 | | }
530 | | }
| |_________- temporary `sender_wakers` is currently being dropped at the end of its contained scope
|
= note: this might lead to unnecessary resource contention
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#significant_drop_tightening
= note: `-D clippy::significant-drop-tightening` implied by `-D clippy::nursery`
help: merge the temporary construction with its single usage
|
523 ~
524 + let idx = self.channel.sender_wakers.lock().unwrap().position(|w| w.will_wake(&waker));
|
help: remove separated single usage
|
524 - let idx = sender_wakers.iter().position(|w| w.will_wake(&waker));
524 +
|
It doesn't seem to realize that sender_wakers
is used twice, once to iterate over (line 524) and then to mutate it (line 526).
Version
rustc 1.72.0-nightly (cb80ff132 2023-07-07)
binary: rustc
commit-hash: cb80ff132a0e9aa71529b701427e4e6c243b58df
commit-date: 2023-07-07
host: x86_64-unknown-linux-gnu
release: 1.72.0-nightly
LLVM version: 16.0.5
clippy 0.1.72 (cb80ff1 2023-07-07)
Additional Labels
No response