2978 Commits

Author SHA1 Message Date
Josh Soref
f3e340a35b
chore: fix spelling mistakes (#4858)
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2022-07-25 07:26:01 +00:00
Ivan Petkov
94a7eaed51
Revert "tests: alter integration tests for stdio to not use a handrolled cat implementation (#4803)" (#4854)
This reverts commit d8cad13fd92c4360031d5bac28514eebdf94ad1d.
2022-07-23 16:27:35 -07:00
Hayden Stainsby
62593be261
doc: remove incorrect panic section for Builder::worker_threads (#4849)
The documentation for the runtime `Builder::worker_threads` function
incorrectly stated that it would panic if used when constructing a
`current_thread` runtime. In truth, the call to the function has no
effect.

Since adding the described panic to the code could cause new panics in
existing code using tokio, the documentation has been modified to
describe the existing behavior.

Refs: #4773
2022-07-23 19:44:00 +02:00
Ivan Petkov
1578575db8
process: use blocking threadpool for child stdio I/O (#4824) 2022-07-23 10:40:04 -07:00
Hayden Stainsby
8c482a5d62
io: add track_caller caller to no-rt io driver (#4852)
This change adds a case that was missing from the original PR, #4793.

The `io::driver::Handle::current` function was only covered by
`#[track_caller]` in the case that the `rt` feature  is enabled, however
it was missing in the case that the `rt` feture isn't enabled (in which
case a panic would be more common).

This particular case cannot be tested in the tokio tests as they always
run with all features enabled.

Refs: #4413
2022-07-21 15:25:42 +00:00
Hayden Stainsby
5288e1e144
task: add track_caller to public APIs (#4848)
Functions that may panic can be annotated with `#[track_caller]` so that
in the event of a panic, the function where the user called the
panicking function is shown instead of the file and line within Tokio
source.

This change adds `#[track_caller]` to all the public APIs in the task
module of the tokio crate where the documentation describes how the
function may panic due to incorrect context or inputs.

In cases where `#[track_caller]` does not work, it has been left out.
For example, it currently does not work on async functions, blocks, or
closures. So any call stack that passes through one of these before
reaching the actual panic is not able to show the calling site outside
of tokio as the panic location.

The following functions have call stacks that pass through closures:
* `task::block_in_place`
* `task::local::spawn_local`

Tests are included to cover each potentially panicking function.

The following functions already had `#[track_caller]` applied everywhere
it was needed and only tests have been added:
* `task::spawn`
* `task::LocalKey::sync_scope`

Refs: #4413
2022-07-20 23:17:41 +02:00
Alice Ryhl
56be5286ee
ci: update required ci steps (#4846) 2022-07-20 14:05:23 +02:00
dwattttt
21900bd42b
net: add security flags to named pipe ServerOptions (#4845) 2022-07-20 11:13:39 +00:00
Alice Ryhl
228d4fce99
runtime: move owned field to Trailer (#4843) 2022-07-19 20:28:20 +02:00
Hayden Stainsby
cbdba8bd32
net: add track_caller to public APIs (#4805)
Functions that may panic can be annotated with #[track_caller] so that
in the event of a panic, the function where the user called the
panicking function is shown instead of the file and line within Tokio
source.

This change adds #[track_caller] to all the non-unstable public net APIs
in the main tokio crate where the documentation describes how the
function may panic due to incorrect context or inputs.  Not all panic
cases can have #[track_caller] applied fully as the callstack passes
through a closure which isn't yet supported by the annotation (e.g. net
functions called from outside a tokio runtime).

Additionally, the documentation was updated to indicate additional cases
in which the public net functions may panic (the same as the io
functions).

Tests are included to cover each potentially panicking function.

Refs: #4413
2022-07-18 20:57:45 +00:00
Alice Ryhl
6f048ca954
tokio: avoid temporary references in linked_list::Link impls (#4841) 2022-07-18 22:47:17 +02:00
Arnav Singh
922fc91408
task: propagate attributes on task-locals (#4837) 2022-07-14 11:32:28 +02:00
Noah Kennedy
5cf22e48c5
chore: allow miri to use latest nightly once again (#4833)
This reverts [#4825], as miri seems to be working again on the latest nightly.

I had originally thought it was this issue with rustup which was to blame, but this seems to be wrong: https://github.com/rust-lang/rustup/issues/3031

[#4825]: https://github.com/tokio-rs/tokio/pull/4825
2022-07-13 11:35:28 -05:00
gftea
14fca343d5
task: add LocalSet::enter (#4736) (#4765) 2022-07-13 18:10:09 +02:00
Colin Walters
8e20cfb9ef
task: expand on cancellation of spawn_blocking (#4811)
I was looking at these docs again and I was thinking the
"cannot be cancelled" is misleading; let's talk about approaches
to do so.
2022-07-13 16:41:13 +02:00
Alice Ryhl
d7b074eca3 Merge branch 'tokio-1.20.x' into 'master' 2022-07-13 08:48:27 +02:00
Ivan Petkov
3b6c74a40a
Make task::Builder::spawn* methods fallible (#4823) 2022-07-12 15:56:33 -07:00
Noah Kennedy
b343767725
chore: prepare Tokio v1.20.0 (#4830) tokio-1.20.0 2022-07-12 22:03:44 +00:00
Eric Zhang
de686b5355
runtime: fix typo in shutdown_background docs (#4829) 2022-07-12 20:51:28 +00:00
Richard Zak
6d3f92dddc
wasm: initial support for wasm32-wasi target (#4716)
This adds initial, unstable, support for the wasm32-wasi target. Not all of Tokio's
features are supported yet as WASI's non-blocking APIs are still limited.

Refs: tokio-rs/tokio#4827
2022-07-12 13:20:26 -07:00
Noah Kennedy
be620e913d
chore: fix ci by hard-coding nightly version for miri (#4825)
It would seem that the latest nightly is having issues, so I went with the one from yesterday (2022-7-10).
2022-07-12 02:14:27 +00:00
Carl Lerche
ad942de2b7
chore: add a regression test for WASI (#4822)
Currently, we only have WASM regression tests that run without WASI.
However, rust provides a WASI specific target which enables code to
special case WASI. This PR adds a basic test to cover that case.

This is an initial addition to help land tokio-rs/tokio#4716.
2022-07-11 12:06:40 -07:00
Hayden Stainsby
4daeea8cad
sync: add track_caller to public APIs (#4808)
Functions that may panic can be annotated with `#[track_caller]` so that
in the event of a panic, the function where the user called the
panicking function is shown instead of the file and line within Tokio
source.

This change adds `#[track_caller]` to all the public APIs in the sync
module of the tokio crate where the documentation describes how the
function may panic due to incorrect context or inputs.

In cases where `#[track_caller]` does not work, it has been left out.
For example, it currently does not work on async functions, blocks, or
closures. So any call stack that passes through one of these before
reaching the actual panic is not able to show the calling site outside
of tokio as the panic location.

The following functions have call stacks that pass through closures:
* `sync::Sender::send_modify`
* `sync::Sender::send_if_modified`

Additionally, in the above functions it is a panic inside the supplied
closure which causes the function to panic, and so showing the location
of the panic itself is desirable.

The following functions are async:
* `sync::mpsc::bounded::Sender::send_timeout`

Tests are included to cover each potentially panicking function.

Refs: #4413
2022-07-06 12:53:52 +02:00
Hayden Stainsby
18efef7d3b
signal: add track_caller to public APIs (#4806)
Functions that may panic can be annotated with #[track_caller] so that
in the event of a panic, the function where the user called the
panicking function is shown instead of the file and line within Tokio
source.

This change adds #[track_caller] to the signal() function which is the
only function in the signal public API which can panic. Documentation
was added to this function to indicate that it may panic.

Not all panic cases can have #[track_caller] applied fully as the
callstack passes through a closure which isn't yet supported by the
annotation (e.g. signal() called from outside a tokio runtime).

Tests are included to cover the case where signal() is called from a
runtime without IO enabled.

Refs: #4413
2022-07-06 12:16:12 +02:00
Noah Kennedy
d8cad13fd9
tests: alter integration tests for stdio to not use a handrolled cat implementation (#4803)
This fixes #4801, where, as a result of https://github.com/rust-lang/rust/pull/95469, our implementation of cat used for this test no longer works, as stdio functions on windows now can abort the process if the pipe is set to nonblocking mode.

Unfortunately in windows, setting one end of the pipe to be nonblocking makes the whole thing nonblocking, so when, in tokio::process we set the child pipes to nonblocking mode, it causes serious problems for any rust program at the other end.

Fixing this issue is for another day, but fixing the tests is for today.
2022-07-01 22:32:15 -05:00
Arnaud Gourlay
8ed06ef825
chore: fix typo (#4798) 2022-06-30 18:35:49 +00:00
Alice Ryhl
e6020c0fed
task: various small improvements to LocalKey (#4795)
Co-authored-by: Kitsu <mail@kitsu.me>
2022-06-30 10:08:41 +00:00
Alphyr
7f92bce39f
tokio: use const initialized thread locals where possible (#4677) 2022-06-29 09:32:14 +00:00
Uwe Klotz
7ed2737de2
sync: Add has_changed method to watch::Ref (#4758) 2022-06-29 09:20:25 +00:00
Alice Ryhl
79d802450b
chore: disable caching for cross jobs (#4794)
CI is running into https://github.com/cross-rs/cross/issues/724, which
should be fixed if we clear the cache.
2022-06-29 10:46:23 +02:00
Alice Ryhl
45f24f1b86
sync: add warning for watch in non-Send futures (#4741) 2022-06-28 23:01:35 +02:00
Hayden Stainsby
b51aa8f6f9
io: add track_caller to public APIs (#4793)
Functions that may panic can be annotated with #[track_caller] so that
in the event of a panic, the function where the user called the
panicking function is shown instead of the file and line within Tokio
source.

This change adds #[track_caller] to all the non-unstable public io APIs
in the main tokio crate where the documentation describes how the
function may panic due to incorrect context or inputs.

Additionally, the documentation for `AsyncFd` was updated to indicate
that the functions `new` and `with_intent` can panic.

Tests are included to cover each potentially panicking function. The
logic to test the location of a panic (which is a little complex), has
been moved to a test support module.

Refs: #4413
2022-06-28 10:55:21 +00:00
Hayden Stainsby
3cc616877d
time: add track_caller to public APIs (#4791)
Functions that may panic can be annotated with #[track_caller] so that
in the event of a panic, the function where the user called the
panicking function is shown instead of the file and line within Tokio
source.

This change adds #[track_caller] to all the non-unstable public APIs in
tokio-util where the documentation describes how the function may panic
due to incorrect context or inputs.

In cases where `#[track_caller]` does not work, it has been left out. For
example, it currently does not work on async functions, blocks, or
closures. So any call stack that passes through one of these before
reaching the actual panic is not able to show the calling site outside
of tokio as the panic location.

The public functions that could not have `#[track_caller]` added for
this reason are:
* `time::advance`

Tests are included to cover each potentially panicking function. In the
following cases, `#[track_caller]` had already been added, and only
tests have been added:
* `time::interval`
* `time::interval_at`

Refs: #4413
2022-06-27 10:40:50 +00:00
Hayden Stainsby
ad412a9833
util: add track_caller to public APIs (#4785)
* util: add track_caller to public APIs

Functions that may panic can be annotated with `#[track_caller]` so that
in the event of a panic, the function where the user called the
panicking function is shown instead of the file and line within Tokio
source.

This change adds `#[track_caller]` to all the non-unstable public APIs in
tokio-util where the documentation describes how the function may panic
due to incorrect context or inputs.

In one place, an assert was added where the described behavior appeared
not to be implemented. The documentation for `DelayQueue::reserve`
states that the function will panic if the new capacity exceeds the
maximum number of entries the queue can contain. However, the function
didn't panic until a higher number caused by an allocation failure. This
is inconsistent with `DelayQueue::insert_at` which will panic if the
number of entries were to go over MAX_ENTRIES.

Tests are included to cover each potentially panicking function.

Refs: #4413

* fix tests on FreeBSD 32-bit (I hope)

Some tests were failing on FreeBSD 32-bit because the "times too far in
the future" for DelayQueue were also too far in the future for the OS.

Fixed by copying the MAX_DURATION value from where it's defined and
using it to create a duration that is just 1 more than the maximum. This
will start to break once we get close (within 2 and a bit years) of the
Epochalypse (19 Jan, 2038) - but a lot of other things are going to be
breaking on FreeBSD 32-bit by then anyway.
2022-06-27 12:31:31 +02:00
baul
55078ffec3
joinset: fix loom test without tokio_unstable (#4783) 2022-06-23 09:41:30 +02:00
Hayden Stainsby
485ca3e37c
stream: add track_caller to public APIs (#4786)
Functions that may panic can be annotated with `#[track_caller]` so that
in the event of a panic, the function where the user called the
panicking function is shown instead of the file and line within Tokio
source.

This change adds `#[track_caller]` to all the non-unstable public APIs
in tokio-stream (only `chunks_timeout` in `StreamExt`) where the
documentation describes how this function may panic due to incorrect
input.

A test has been included to cover the panic.

Refs: #4413
2022-06-22 17:27:23 +00:00
Hayden Stainsby
159508b916
add track_caller to public APIs (#4413) (#4772)
Functions that may panic can be annotated with `#[track_caller]` so that
in the event of a panic, the function where the user called the
panicking function is shown instead of the file and line within Tokio
source.

This change adds track caller to all the non-unstable public APIs in
Tokio core where the documentation describes how the function may panic
due to incorrect context or inputs.  Since each internal function needs
to be annotated down to the actual panic, it makes sense to start in
Tokio core functionality.

Tests are needed to ensure that all the annotations remain in place in
case internal refactoring occurs.

The test installs a panic hook to extract the file location from the
`PanicInfo` struct and clone it up to the outer scope to check that the
panic was indeed reported from within the test file.  The downside to
this approach is that the panic hook is global while set and so we need
a lot of extra functionality to effectively serialize the tests so that
only a single panic can occur at a time.

The annotation of `block_on` was removed as it did not work. It appears
to be impossible to correctly chain track caller when the call stack to
the panic passes through clojures, as the track caller annotation can
only be applied to functions. Also, the panic message itself is very
descriptive.
2022-06-22 06:31:36 +00:00
Alice Ryhl
34b8ebbe66
sync: document spurious failures in oneshot (#4777) 2022-06-19 16:07:35 +02:00
b-naber
d8fb721de2
task: improve LocalPoolHandle (#4680) 2022-06-17 18:37:00 +02:00
Carl Lerche
c98be229ff
rt: unhandled panic config for current thread rt (#4770)
Allows the user to configure the runtime's behavior when a spawned task
panics. Currently, the panic is propagated to the JoinHandle and the
runtime resumes. This patch lets the user set the runtime to shutdown on
unhandled panic.

So far, this is only implemented for the current-thread runtime.

Refs: #4516
2022-06-16 12:54:43 -07:00
gftea
90bc5faa7e
net: be more specific about winapi features (#4764) 2022-06-16 09:52:50 +00:00
Richard Zak
f26ce08f37
chore: fix spelling (#4769)
Signed-off-by: Richard Zak <richard@profian.com>
2022-06-15 16:06:50 +00:00
NotAFile
d487c1ca34
fs: warn about performance pitfall (#4762) 2022-06-15 08:22:03 +02:00
Carl Lerche
f7a64538f7
rt: clean up arguments passed to basic scheduler (#4767)
Extracts the refactor from #4518.

The basic scheduler takes many configuration options as arguments to the
constructor. This cleans it up a bit by defining a `Config` struct and
using that to pass arguments to the constructor.
2022-06-14 18:35:43 -07:00
Erick Tryzelaar
8d29edca24
time: remove src/time/driver/wheel/stack.rs (#4766)
This removes tokio/src/time/driver/wheel/stack.rs. The module was
removed in #3080, but the actual file wasn't removed in it.
2022-06-13 18:14:16 +02:00
George Pyrros
89000ca1da
macros: improve the documentation for #[tokio::test] (#4761) 2022-06-13 12:47:42 +00:00
David Barsky
08d49532b4
joinset: rename join_one to join_next (#4755) 2022-06-09 22:41:25 +02:00
Alice Ryhl
340c4dc3b2
chore: prepare Tokio v1.19.2 (#4754) tokio-1.19.2 2022-06-06 17:38:28 +02:00
jefftt
7011a68343
time: add StreamExt::chunks_timeout (#4695) 2022-06-06 16:16:50 +02:00
Alice Ryhl
c7280167db
sync: fix will_wake usage in Notify (#4751) 2022-06-06 09:40:40 +02:00