Skip to content
Snippets Groups Projects
Commit c1cf1e0b authored by Martin Karlgren's avatar Martin Karlgren
Browse files

Concurrent.results: Handle an empty argument array properly.

Previously code such as:

  Concurrent.Future f2 = Concurrent.results(({}));

  f2->on_success(lambda(array(string) a) { werror("success: %O.\n", a); })
    ->on_failure(lambda(mixed err) { werror (describe_backtrace(err)); });

... would lead to a backtrace because the future was destructed prematurely.
parent f506de44
No related branches found
No related tags found
No related merge requests found
......@@ -1059,6 +1059,9 @@ variant inline Future race(Future ... futures)
//! @[all()], @[Promise.depend()]
variant Future results(array(Future) futures)
{
if(!sizeof(futures))
return resolve(({}));
return Promise()->depend(futures)->future();
}
inline variant Future results(Future ... futures)
......
......@@ -379,6 +379,12 @@ test_do([[ add_constant("p12"); ]])
test_do([[ add_constant("p13"); ]])
exit_promise(1, ({11, 14, 12, 13}))
dnl - Concurrent.results() - empty
init_promise()
test_do([[ add_constant("future", Concurrent.results(({}))); ]])
init_future()
exit_promise(1, ({}))
dnl - Concurrent.traverse()
init_promise()
test_do([[ add_constant("p11", Concurrent.Promise()); ]])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment