Go to file
John Nunley 4154ad2190
Fix a bug where TLS would become None (#55)
* Fix a bug where TLS would become None

The bug is invoked as follows:

- Runner 1 is created and stores the current version of the TLS
  LOCAL_QUEUE variable, which is None.
- Runner 2 is also created. It stores the current version of the TLS
  variable as well, which is Runner 1's queue.
- Runner 1 is dropped. It stores None into the LOCAL_QUEUE variable.
- Runner 2 tries to run. It reads from the LOCAL_QUEUE variable, sees
  that it is None, and panics.

This could be solved by just not using the local queue if the variable
is None. However, we can do one better; if the slot is open, we can
optimize the runner by replacing it with our own queue. This should
allow for the local queue to be used more often.

Closes #54

Signed-off-by: John Nunley <dev@notgull.net>
2023-09-27 20:01:15 -07:00
.github Update actions/checkout action to v4 2023-09-10 18:18:02 +09:00
benches Replace `num_cpus` crate with `std::thread` (#42) 2023-05-05 21:38:00 +09:00
examples Update futures-lite 2020-10-09 14:49:25 +02:00
src Fix a bug where TLS would become None (#55) 2023-09-27 20:01:15 -07:00
tests Fix a bug where TLS would become None (#55) 2023-09-27 20:01:15 -07:00
.gitignore Initial commit 2020-07-23 12:08:20 +02:00
CHANGELOG.md v1.5.3 2023-09-25 09:52:25 -07:00
Cargo.toml v1.5.3 2023-09-25 09:52:25 -07:00
LICENSE-APACHE Initial commit 2020-07-23 12:08:20 +02:00
LICENSE-MIT Initial commit 2020-07-23 12:08:20 +02:00
README.md Update license badge to match Cargo.toml 2021-02-14 13:39:05 +09:00

README.md

async-executor

Build License Cargo Documentation

Async executors.

Examples

use async_executor::Executor;
use futures_lite::future;

// Create a new executor.
let ex = Executor::new();

// Spawn a task.
let task = ex.spawn(async {
    println!("Hello world");
});

// Run the executor until the task completes.
future::block_on(ex.run(task));

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.