Skip to content

Commit 2e9fbb9

Browse files
committed
chore: delete defunct use of futures-intrusive
1 parent 34dc79e commit 2e9fbb9

File tree

1 file changed

+0
-132
lines changed

1 file changed

+0
-132
lines changed

sqlx-core/src/sync.rs

-132
Original file line numberDiff line numberDiff line change
@@ -9,135 +9,3 @@ pub use async_std::sync::{Mutex as AsyncMutex, MutexGuard as AsyncMutexGuard};
99

1010
#[cfg(feature = "_rt-tokio")]
1111
pub use tokio::sync::{Mutex as AsyncMutex, MutexGuard as AsyncMutexGuard};
12-
13-
pub struct AsyncSemaphore {
14-
// We use the semaphore from futures-intrusive as the one from async-std
15-
// is missing the ability to add arbitrary permits, and is not guaranteed to be fair:
16-
// * https://github.com/smol-rs/async-lock/issues/22
17-
// * https://github.com/smol-rs/async-lock/issues/23
18-
//
19-
// We're on the look-out for a replacement, however, as futures-intrusive is not maintained
20-
// and there are some soundness concerns (although it turns out any intrusive future is unsound
21-
// in MIRI due to the necessitated mutable aliasing):
22-
// https://github.com/launchbadge/sqlx/issues/1668
23-
#[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))]
24-
inner: futures_intrusive::sync::Semaphore,
25-
26-
#[cfg(feature = "_rt-tokio")]
27-
inner: tokio::sync::Semaphore,
28-
}
29-
30-
impl AsyncSemaphore {
31-
#[track_caller]
32-
pub fn new(fair: bool, permits: usize) -> Self {
33-
if cfg!(not(any(feature = "_rt-async-std", feature = "_rt-tokio"))) {
34-
crate::rt::missing_rt((fair, permits));
35-
}
36-
37-
AsyncSemaphore {
38-
#[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))]
39-
inner: futures_intrusive::sync::Semaphore::new(fair, permits),
40-
#[cfg(feature = "_rt-tokio")]
41-
inner: {
42-
debug_assert!(fair, "Tokio only has fair permits");
43-
tokio::sync::Semaphore::new(permits)
44-
},
45-
}
46-
}
47-
48-
pub fn permits(&self) -> usize {
49-
#[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))]
50-
return self.inner.permits();
51-
52-
#[cfg(feature = "_rt-tokio")]
53-
return self.inner.available_permits();
54-
55-
#[cfg(not(any(feature = "_rt-async-std", feature = "_rt-tokio")))]
56-
crate::rt::missing_rt(())
57-
}
58-
59-
pub async fn acquire(&self, permits: u32) -> AsyncSemaphoreReleaser<'_> {
60-
#[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))]
61-
return AsyncSemaphoreReleaser {
62-
inner: self.inner.acquire(permits as usize).await,
63-
};
64-
65-
#[cfg(feature = "_rt-tokio")]
66-
return AsyncSemaphoreReleaser {
67-
inner: self
68-
.inner
69-
// Weird quirk: `tokio::sync::Semaphore` mostly uses `usize` for permit counts,
70-
// but `u32` for this and `try_acquire_many()`.
71-
.acquire_many(permits)
72-
.await
73-
.expect("BUG: we do not expose the `.close()` method"),
74-
};
75-
76-
#[cfg(not(any(feature = "_rt-async-std", feature = "_rt-tokio")))]
77-
crate::rt::missing_rt(permits)
78-
}
79-
80-
pub fn try_acquire(&self, permits: u32) -> Option<AsyncSemaphoreReleaser<'_>> {
81-
#[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))]
82-
return Some(AsyncSemaphoreReleaser {
83-
inner: self.inner.try_acquire(permits as usize)?,
84-
});
85-
86-
#[cfg(feature = "_rt-tokio")]
87-
return Some(AsyncSemaphoreReleaser {
88-
inner: self.inner.try_acquire_many(permits).ok()?,
89-
});
90-
91-
#[cfg(not(any(feature = "_rt-async-std", feature = "_rt-tokio")))]
92-
crate::rt::missing_rt(permits)
93-
}
94-
95-
pub fn release(&self, permits: usize) {
96-
#[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))]
97-
return self.inner.release(permits);
98-
99-
#[cfg(feature = "_rt-tokio")]
100-
return self.inner.add_permits(permits);
101-
102-
#[cfg(not(any(feature = "_rt-async-std", feature = "_rt-tokio")))]
103-
crate::rt::missing_rt(permits)
104-
}
105-
}
106-
107-
pub struct AsyncSemaphoreReleaser<'a> {
108-
// We use the semaphore from futures-intrusive as the one from async-std
109-
// is missing the ability to add arbitrary permits, and is not guaranteed to be fair:
110-
// * https://github.com/smol-rs/async-lock/issues/22
111-
// * https://github.com/smol-rs/async-lock/issues/23
112-
//
113-
// We're on the look-out for a replacement, however, as futures-intrusive is not maintained
114-
// and there are some soundness concerns (although it turns out any intrusive future is unsound
115-
// in MIRI due to the necessitated mutable aliasing):
116-
// https://github.com/launchbadge/sqlx/issues/1668
117-
#[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))]
118-
inner: futures_intrusive::sync::SemaphoreReleaser<'a>,
119-
120-
#[cfg(feature = "_rt-tokio")]
121-
inner: tokio::sync::SemaphorePermit<'a>,
122-
123-
#[cfg(not(any(feature = "_rt-async-std", feature = "_rt-tokio")))]
124-
_phantom: std::marker::PhantomData<&'a ()>,
125-
}
126-
127-
impl AsyncSemaphoreReleaser<'_> {
128-
pub fn disarm(self) {
129-
#[cfg(feature = "_rt-tokio")]
130-
{
131-
self.inner.forget();
132-
}
133-
134-
#[cfg(all(feature = "_rt-async-std", not(feature = "_rt-tokio")))]
135-
{
136-
let mut this = self;
137-
this.inner.disarm();
138-
}
139-
140-
#[cfg(not(any(feature = "_rt-async-std", feature = "_rt-tokio")))]
141-
crate::rt::missing_rt(())
142-
}
143-
}

0 commit comments

Comments
 (0)