Skip to content

Commit 0e83720

Browse files
committed
Fix a panic on TokenSource creation
1 parent 21c4017 commit 0e83720

File tree

3 files changed

+38
-2
lines changed

3 files changed

+38
-2
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "stop-token"
3-
version = "0.1.0"
3+
version = "0.1.1"
44
authors = ["Aleksey Kladov <[email protected]>"]
55
edition = "2018"
66
license = "MIT OR Apache-2.0"

src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ pub struct StopToken {
101101

102102
impl Default for StopSource {
103103
fn default() -> StopSource {
104-
let (sender, receiver) = channel::<Never>(0);
104+
let (sender, receiver) = channel::<Never>(1);
105105

106106
StopSource {
107107
_chan: sender,

tests/tests.rs

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
use std::time::Duration;
2+
3+
use async_std::{prelude::*, task, sync::channel};
4+
5+
use stop_token::StopSource;
6+
7+
#[test]
8+
fn smoke() {
9+
task::block_on(async {
10+
let (sender, receiver) = channel::<i32>(10);
11+
let stop_source = StopSource::new();
12+
let task = task::spawn({
13+
let stop_token = stop_source.stop_token();
14+
let receiver = receiver.clone();
15+
async move {
16+
let mut xs = Vec::new();
17+
let mut stream = stop_token.stop_stream(receiver);
18+
while let Some(x) = stream.next().await {
19+
xs.push(x)
20+
}
21+
xs
22+
}});
23+
sender.send(1).await;
24+
sender.send(2).await;
25+
sender.send(3).await;
26+
27+
task::sleep(Duration::from_millis(250)).await;
28+
drop(stop_source);
29+
task::sleep(Duration::from_millis(250)).await;
30+
31+
sender.send(4).await;
32+
sender.send(5).await;
33+
sender.send(6).await;
34+
assert_eq!(task.await, vec![1, 2, 3]);
35+
})
36+
}

0 commit comments

Comments
 (0)