(&self)
| 146 | #[inline] |
| 147 | #[must_use] |
| 148 | pub fn dec(&self) -> bool { |
| 149 | let old = State::from_raw(self.state.fetch_sub(COUNT, Ordering::Release)); |
| 150 | |
| 151 | // LEAKED objects never reach 0 |
| 152 | if old.leaked() { |
| 153 | return false; |
| 154 | } |
| 155 | |
| 156 | if old.strong() == 1 { |
| 157 | core::sync::atomic::fence(Ordering::Acquire); |
| 158 | return true; |
| 159 | } |
| 160 | false |
| 161 | } |
| 162 | |
| 163 | /// Mark this object as leaked (interned). It will never be deallocated. |
| 164 | pub fn leak(&self) { |
no test coverage detected