Skip to content

Commit 1938a8d

Browse files
committed
don't allocate empty streams in Task::batch
1 parent d188d6f commit 1938a8d

1 file changed

Lines changed: 10 additions & 2 deletions

File tree

runtime/src/task.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,19 +96,27 @@ impl<T> Task<T> {
9696
where
9797
T: 'static,
9898
{
99+
let mut last_stream = None;
99100
let mut select_all = stream::SelectAll::new();
100101
let mut units = 0;
101102

102103
for task in tasks.into_iter() {
103-
if let Some(stream) = task.stream {
104+
if let Some(stream) = task.stream
105+
&& let Some(stream) = last_stream.replace(stream)
106+
{
104107
select_all.push(stream);
105108
}
106109

107110
units += task.units;
108111
}
109112

110113
Self {
111-
stream: Some(boxed_stream(select_all)),
114+
stream: if select_all.is_empty() {
115+
last_stream
116+
} else {
117+
select_all.extend(last_stream);
118+
Some(boxed_stream(select_all))
119+
},
112120
units,
113121
}
114122
}

0 commit comments

Comments
 (0)