From 7eac243d93c2587d15c80278464f725b56383403 Mon Sep 17 00:00:00 2001 From: Hartmut Kaiser Date: Wed, 6 Sep 2017 16:02:10 -0500 Subject: [PATCH] Adapt broadcast() to non-unwrapping async This fixes #2885 --- hpx/lcos/broadcast.hpp | 4 +- tests/regressions/lcos/CMakeLists.txt | 2 + .../lcos/broadcast_unwrap_future_2885.cpp | 55 +++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 tests/regressions/lcos/broadcast_unwrap_future_2885.cpp diff --git a/hpx/lcos/broadcast.hpp b/hpx/lcos/broadcast.hpp index 53f4cb1a90d4..5a1da95f3692 100644 --- a/hpx/lcos/broadcast.hpp +++ b/hpx/lcos/broadcast.hpp @@ -506,7 +506,9 @@ namespace hpx { namespace lcos std::vector wrap_into_vector(hpx::future r) { - return std::vector(1, r.get()); + std::vector result; + result.push_back(r.get()); + return result; } template < diff --git a/tests/regressions/lcos/CMakeLists.txt b/tests/regressions/lcos/CMakeLists.txt index a0998f04dd44..bca0e00bed84 100644 --- a/tests/regressions/lcos/CMakeLists.txt +++ b/tests/regressions/lcos/CMakeLists.txt @@ -11,6 +11,7 @@ set(tests async_callback_non_deduced_context async_unwrap_1037 barrier_hang + broadcast_unwrap_future_2885 broadcast_wait_for_2822 call_promise_get_gid_more_than_once channel_register_as_2722 @@ -60,6 +61,7 @@ set(after_588_PARAMETERS LOCALITIES 2) set(async_action_1813_PARAMETERS LOCALITIES 2) set(async_callback_with_bound_callback_PARAMETERS LOCALITIES 2) set(async_callback_non_deduced_context_PARAMETERS THREADS_PER_LOCALITY 4) +set(broadcast_unwrap_future_2885_PARAMETERS LOCALITIES 2 THREADS_PER_LOCALITY 4) set(broadcast_wait_for_2822_PARAMETERS LOCALITIES 2 THREADS_PER_LOCALITY 4) set(future_hang_on_get_629_PARAMETERS LOCALITIES 2 THREADS_PER_LOCALITY 2) set(dataflow_future_swap2_FLAGS DEPENDENCIES iostreams_component) diff --git a/tests/regressions/lcos/broadcast_unwrap_future_2885.cpp b/tests/regressions/lcos/broadcast_unwrap_future_2885.cpp new file mode 100644 index 000000000000..1e0ba60c5128 --- /dev/null +++ b/tests/regressions/lcos/broadcast_unwrap_future_2885.cpp @@ -0,0 +1,55 @@ +// Copyright (c) 2017 Hartmut Kaiser +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include + +#include +#include + +hpx::future bcast_void(double bcast) +{ + return hpx::make_ready_future(); +} + +HPX_PLAIN_ACTION(bcast_void); + +HPX_REGISTER_BROADCAST_ACTION_DECLARATION(bcast_void_action) +HPX_REGISTER_BROADCAST_ACTION(bcast_void_action) + +hpx::future bcast(double bcast) +{ + return hpx::make_ready_future(bcast); +} + +HPX_PLAIN_ACTION(bcast); + +HPX_REGISTER_BROADCAST_ACTION_DECLARATION(bcast_action) +HPX_REGISTER_BROADCAST_ACTION(bcast_action) + +int hpx_main() +{ + std::vector localities = hpx::find_all_localities(); + + auto f1 = hpx::lcos::broadcast(localities, 42.0); + f1.get(); + + auto f2 = hpx::lcos::broadcast(localities, 42.0); + for (hpx::future& f : f2.get()) + { + HPX_TEST_EQ(42.0, f.get()); + } + + return hpx::finalize(); +} + +int main(int argc, char* argv[]) +{ + HPX_TEST_EQ(hpx::init(argc, argv), 0); + return hpx::util::report_errors(); +} +