summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Rx/v2/src/rxcpp/rx-observable.hpp22
-rw-r--r--projects/scripts/travis-doxygen.sh16
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