diff options
-rw-r--r-- | Rx/v2/src/rxcpp/rx-observable.hpp | 22 | ||||
-rw-r--r-- | projects/scripts/travis-doxygen.sh | 16 |
2 files changed, 27 insertions, 11 deletions
diff --git a/Rx/v2/src/rxcpp/rx-observable.hpp b/Rx/v2/src/rxcpp/rx-observable.hpp index 2cf47dc..8f8aec7 100644 --- a/Rx/v2/src/rxcpp/rx-observable.hpp +++ b/Rx/v2/src/rxcpp/rx-observable.hpp @@ -189,7 +189,8 @@ class blocking_observable -> composite_subscription { std::mutex lock; std::condition_variable wake; - composite_subscription cs; + std::exception_ptr error; + struct tracking { ~tracking() @@ -210,8 +211,17 @@ class blocking_observable }; auto track = std::make_shared<tracking>(); - auto scbr = make_subscriber<T>(std::forward<ArgN>(an)...); - cs = scbr.get_subscription(); + auto dest = make_subscriber<T>(std::forward<ArgN>(an)...); + + // keep any error to rethrow at the end. + auto scbr = make_subscriber<T>( + dest, + [&](T t){dest.on_next(t);}, + [&](std::exception_ptr e){dest.on_error(e); error = e;}, + [&](){dest.on_completed();} + ); + + auto cs = scbr.get_subscription(); cs.add( [&, track](){ // OSX geting invalid x86 op if notify_one is after the disposed = true @@ -220,8 +230,10 @@ class blocking_observable wake.notify_one(); track->disposed = true; }); + std::unique_lock<std::mutex> guard(lock); source.subscribe(std::move(scbr)); + wake.wait(guard, [&, track](){ // this is really not good. @@ -236,7 +248,9 @@ class blocking_observable }); track->wakened = true; if (!track->disposed || !track->wakened) abort(); - return composite_subscription::empty(); + + if (error) {std::rethrow_exception(error);} + return cs; } public: diff --git a/projects/scripts/travis-doxygen.sh b/projects/scripts/travis-doxygen.sh index 7ddb713..1b908b3 100644 --- a/projects/scripts/travis-doxygen.sh +++ b/projects/scripts/travis-doxygen.sh @@ -2,10 +2,12 @@ set -e -cd projects/doxygen/html -git init -git config user.name "Kirk Shoop" -git config user.email "kirk.shoop@microsoft.com" -git add * -git commit -m "doxygen generated site" -git push --force "https://${GH_TOKEN}@github.com/Reactive-Extensions/RxCpp.git" master:gh-pages +if [ -n "$GH_TOKEN" ]; then + cd projects/doxygen/html + git init + git config user.name "Kirk Shoop" + git config user.email "kirk.shoop@microsoft.com" + git add * + git commit -m "doxygen generated site" + git push --force "https://${GH_TOKEN}@github.com/Reactive-Extensions/RxCpp.git" master:gh-pages +fi |