From 5aea424898994b3d409db268486202244cfe5053 Mon Sep 17 00:00:00 2001 From: Grigoriy Chudnov Date: Sat, 15 Jul 2017 01:49:47 +0300 Subject: fix timeout when no items are emitted (#387) --- Rx/v2/src/rxcpp/operators/rx-timeout.hpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'Rx/v2/src/rxcpp/operators') diff --git a/Rx/v2/src/rxcpp/operators/rx-timeout.hpp b/Rx/v2/src/rxcpp/operators/rx-timeout.hpp index 6750e34..841df12 100644 --- a/Rx/v2/src/rxcpp/operators/rx-timeout.hpp +++ b/Rx/v2/src/rxcpp/operators/rx-timeout.hpp @@ -126,6 +126,20 @@ struct timeout localState->cs.add([=](){ localState->worker.schedule(selectedDisposer.get()); }); + + auto work = [v, localState](const rxsc::schedulable&) { + auto new_id = ++localState->index; + auto produce_time = localState->worker.now() + localState->period; + + localState->worker.schedule(produce_time, produce_timeout(new_id, localState)); + }; + auto selectedWork = on_exception( + [&](){return localState->coordinator.act(work);}, + localState->dest); + if (selectedWork.empty()) { + return; + } + localState->worker.schedule(selectedWork.get()); } static std::function produce_timeout(std::size_t id, state_type state) { -- cgit v1.2.3