Skip to content

Commit

Permalink
core: adjust Once to not violate feature additivity principle (#760)
Browse files Browse the repository at this point in the history
When the following dependencies and their features were specified:

```toml
tracing-core = { version = "0.1", default-features = false, features = ["std"] }
tracing = { version = "0.1", default-features = false }
```

The build would fail with the following error:

```
error[E0412]: cannot find type `Once` in crate `tracing_core`
   --> tracing/src/lib.rs:840:35
    |
840 |     pub type Once = tracing_core::Once<()>;
    |                                   ^^^^ not found in `tracing_core`
    |
```

This happened because `tracing-core` exports `Once` only if its `std`
feature is disabled. And the depending `tracing` crate assumed that if
its `std` feature was disabled, so would be the `std` feature in
`tracing-core`.

This is a violation of the [undocumented "features must be additive"
guideline][ag]. In this commit tracing-core is adjusted to export `Once`
regardless of whether `std` is disabled or not.

[ag]: rust-lang/cargo#4328
  • Loading branch information
nagisa committed Jun 22, 2020
1 parent 4fe9033 commit b36d59d
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 9 deletions.
2 changes: 1 addition & 1 deletion tracing-core/src/lazy_static/core_lazy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
// http://opensource.org/licenses/MIT>, at your option. This file may not be
// copied, modified, or distributed except according to those terms.

use crate::Once;
use crate::spin::Once;

pub(crate) struct Lazy<T: Sync>(Once<T>);

Expand Down
5 changes: 4 additions & 1 deletion tracing-core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,10 @@ pub(crate) mod spin;

#[cfg(not(feature = "std"))]
#[doc(hidden)]
pub use self::spin::Once;
pub type Once = self::spin::Once<()>;

#[cfg(feature = "std")]
pub use stdlib::sync::Once;

pub mod callsite;
pub mod dispatcher;
Expand Down
2 changes: 1 addition & 1 deletion tracing-core/src/spin/mod.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//! Synchronization primitives based on spinning

pub(crate) use mutex::*;
pub use once::Once;
pub(crate) use once::Once;

mod mutex;
mod once;
7 changes: 1 addition & 6 deletions tracing/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -832,12 +832,7 @@ pub mod subscriber;
#[doc(hidden)]
pub mod __macro_support {
pub use crate::stdlib::sync::atomic::{AtomicUsize, Ordering};

#[cfg(feature = "std")]
pub use crate::stdlib::sync::Once;

#[cfg(not(feature = "std"))]
pub type Once = tracing_core::Once<()>;
pub type Once = tracing_core::Once;
}

mod sealed {
Expand Down

0 comments on commit b36d59d

Please sign in to comment.