summaryrefslogtreecommitdiffstats
path: root/tokio/src/sync/mpsc
diff options
context:
space:
mode:
authorCarl Lerche <me@carllerche.com>2019-11-18 07:00:55 -0800
committerGitHub <noreply@github.com>2019-11-18 07:00:55 -0800
commit0d38936b35779b604770120da2e98560bbb6241f (patch)
tree843d46e999becdb580cb02655b4290acadd64474 /tokio/src/sync/mpsc
parent13b6e9939e062dc01bcf34abe3d75de4b66e20e1 (diff)
chore: refine feature flags (#1785)
Removes dependencies between Tokio feature flags. For example, `process` should not depend on `sync` simply because it uses the `mpsc` channel. Instead, feature flags represent **public** APIs that become available with the feature enabled. When the feature is not enabled, the functionality is removed. If another Tokio component requires the functionality, it is stays as `pub(crate)`. The threaded scheduler is now exposed under `rt-threaded`. This feature flag only enables the threaded scheduler and does not include I/O, networking, or time. Those features must be explictly enabled. A `full` feature flag is added that enables all features. `stdin`, `stdout`, `stderr` are exposed under `io-std`. Macros are used to scope code by feature flag.
Diffstat (limited to 'tokio/src/sync/mpsc')
-rw-r--r--tokio/src/sync/mpsc/bounded.rs11
-rw-r--r--tokio/src/sync/mpsc/chan.rs6
-rw-r--r--tokio/src/sync/mpsc/list.rs7
-rw-r--r--tokio/src/sync/mpsc/mod.rs2
4 files changed, 8 insertions, 18 deletions
diff --git a/tokio/src/sync/mpsc/bounded.rs b/tokio/src/sync/mpsc/bounded.rs
index 523dde75..d635e138 100644
--- a/tokio/src/sync/mpsc/bounded.rs
+++ b/tokio/src/sync/mpsc/bounded.rs
@@ -161,12 +161,13 @@ impl<T> Receiver<T> {
impl<T> Unpin for Receiver<T> {}
-#[cfg(feature = "stream")]
-impl<T> futures_core::Stream for Receiver<T> {
- type Item = T;
+cfg_stream! {
+ impl<T> futures_core::Stream for Receiver<T> {
+ type Item = T;
- fn poll_next(mut self: std::pin::Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<T>> {
- self.poll_recv(cx)
+ fn poll_next(mut self: std::pin::Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<T>> {
+ self.poll_recv(cx)
+ }
}
}
diff --git a/tokio/src/sync/mpsc/chan.rs b/tokio/src/sync/mpsc/chan.rs
index 03f35339..4030e380 100644
--- a/tokio/src/sync/mpsc/chan.rs
+++ b/tokio/src/sync/mpsc/chan.rs
@@ -299,12 +299,6 @@ where
// second time here.
try_recv!();
- debug!(
- "recv; rx_closed = {:?}; is_idle = {:?}",
- rx_fields.rx_closed,
- self.inner.semaphore.is_idle()
- );
-
if rx_fields.rx_closed && self.inner.semaphore.is_idle() {
Ready(None)
} else {
diff --git a/tokio/src/sync/mpsc/list.rs b/tokio/src/sync/mpsc/list.rs
index eecc4da3..dc956403 100644
--- a/tokio/src/sync/mpsc/list.rs
+++ b/tokio/src/sync/mpsc/list.rs
@@ -169,7 +169,6 @@ impl<T> Tx<T> {
}
pub(crate) unsafe fn reclaim_block(&self, mut block: NonNull<Block<T>>) {
- debug!("+ reclaim_block({:p})", block);
// The block has been removed from the linked list and ownership
// is reclaimed.
//
@@ -206,7 +205,6 @@ impl<T> Tx<T> {
}
if !reused {
- debug!(" + block freed {:p}", block);
let _ = Box::from_raw(block.as_ptr());
}
}
@@ -226,7 +224,6 @@ impl<T> Rx<T> {
pub(crate) fn pop(&mut self, tx: &Tx<T>) -> Option<block::Read<T>> {
// Advance `head`, if needed
if !self.try_advancing_head() {
- debug!("+ !self.try_advancing_head() -> false");
return None;
}
@@ -276,8 +273,6 @@ impl<T> Rx<T> {
}
fn reclaim_blocks(&mut self, tx: &Tx<T>) {
- debug!("+ reclaim_blocks()");
-
while self.free_head != self.head {
unsafe {
// Get a handle to the block that will be freed and update
@@ -316,7 +311,6 @@ impl<T> Rx<T> {
/// Effectively `Drop` all the blocks. Should only be called once, when
/// the list is dropping.
pub(super) unsafe fn free_blocks(&mut self) {
- debug!("+ free_blocks()");
debug_assert_ne!(self.free_head, NonNull::dangling());
let mut cur = Some(self.free_head);
@@ -331,7 +325,6 @@ impl<T> Rx<T> {
while let Some(block) = cur {
cur = block.as_ref().load_next(Relaxed);
- debug!(" + free: block = {:p}", block);
drop(Box::from_raw(block.as_ptr()));
}
}
diff --git a/tokio/src/sync/mpsc/mod.rs b/tokio/src/sync/mpsc/mod.rs
index 7927dde6..60ae60cd 100644
--- a/tokio/src/sync/mpsc/mod.rs
+++ b/tokio/src/sync/mpsc/mod.rs
@@ -1,3 +1,5 @@
+#![cfg_attr(not(feature = "sync"), allow(dead_code, unreachable_pub))]
+
//! A multi-producer, single-consumer queue for sending values across
//! asynchronous tasks.
//!