summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2019-11-14 04:08:53 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2019-11-14 04:08:53 +0000
commitba332e721c94665023ac63e91004677993c7597e (patch)
tree15ac6f89ad47dc0cbdcf740c91b0c0829d86c137
parent79425415069cb3b9b2d11ee779c1bfd0e81fe2d5 (diff)
parent439b0fad1d24972948f96f58a8931ebe72d0ab29 (diff)
downloadRxCpp-android11-gsi.tar.gz
Snap for 6007460 from 439b0fad1d24972948f96f58a8931ebe72d0ab29 to rvc-releaseandroid-vts-11.0_r9android-vts-11.0_r8android-vts-11.0_r7android-vts-11.0_r6android-vts-11.0_r5android-vts-11.0_r4android-vts-11.0_r3android-vts-11.0_r2android-vts-11.0_r16android-vts-11.0_r15android-vts-11.0_r14android-vts-11.0_r13android-vts-11.0_r12android-vts-11.0_r11android-vts-11.0_r10android-vts-11.0_r1android-security-11.0.0_r76android-security-11.0.0_r75android-security-11.0.0_r74android-security-11.0.0_r73android-security-11.0.0_r72android-security-11.0.0_r71android-security-11.0.0_r70android-security-11.0.0_r69android-security-11.0.0_r68android-security-11.0.0_r67android-security-11.0.0_r66android-security-11.0.0_r65android-security-11.0.0_r64android-security-11.0.0_r63android-security-11.0.0_r62android-security-11.0.0_r61android-security-11.0.0_r60android-security-11.0.0_r59android-security-11.0.0_r58android-security-11.0.0_r57android-security-11.0.0_r56android-security-11.0.0_r55android-security-11.0.0_r54android-security-11.0.0_r53android-security-11.0.0_r52android-security-11.0.0_r51android-security-11.0.0_r50android-security-11.0.0_r49android-security-11.0.0_r1android-platform-11.0.0_r9android-platform-11.0.0_r8android-platform-11.0.0_r7android-platform-11.0.0_r6android-platform-11.0.0_r5android-platform-11.0.0_r40android-platform-11.0.0_r4android-platform-11.0.0_r39android-platform-11.0.0_r38android-platform-11.0.0_r37android-platform-11.0.0_r36android-platform-11.0.0_r35android-platform-11.0.0_r34android-platform-11.0.0_r33android-platform-11.0.0_r32android-platform-11.0.0_r31android-platform-11.0.0_r30android-platform-11.0.0_r3android-platform-11.0.0_r29android-platform-11.0.0_r28android-platform-11.0.0_r27android-platform-11.0.0_r26android-platform-11.0.0_r25android-platform-11.0.0_r24android-platform-11.0.0_r23android-platform-11.0.0_r22android-platform-11.0.0_r21android-platform-11.0.0_r20android-platform-11.0.0_r2android-platform-11.0.0_r19android-platform-11.0.0_r18android-platform-11.0.0_r17android-platform-11.0.0_r16android-platform-11.0.0_r15android-platform-11.0.0_r14android-platform-11.0.0_r13android-platform-11.0.0_r12android-platform-11.0.0_r11android-platform-11.0.0_r10android-platform-11.0.0_r1android-cts-11.0_r9android-cts-11.0_r8android-cts-11.0_r7android-cts-11.0_r6android-cts-11.0_r5android-cts-11.0_r4android-cts-11.0_r3android-cts-11.0_r2android-cts-11.0_r16android-cts-11.0_r15android-cts-11.0_r14android-cts-11.0_r13android-cts-11.0_r12android-cts-11.0_r11android-cts-11.0_r10android-cts-11.0_r1android-11.0.0_r6android-11.0.0_r5android-11.0.0_r4android-11.0.0_r3android-11.0.0_r25android-11.0.0_r2android-11.0.0_r17android-11.0.0_r1android11-tests-releaseandroid11-security-releaseandroid11-s1-releaseandroid11-releaseandroid11-platform-releaseandroid11-gsi
Change-Id: I9a1e2a6c265edb6444d97292b56b6018181c7f55
-rw-r--r--Rx/v2/src/rxcpp/rx-observable.hpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/Rx/v2/src/rxcpp/rx-observable.hpp b/Rx/v2/src/rxcpp/rx-observable.hpp
index 4f42007..7e3d567 100644
--- a/Rx/v2/src/rxcpp/rx-observable.hpp
+++ b/Rx/v2/src/rxcpp/rx-observable.hpp
@@ -174,22 +174,26 @@ class blocking_observable
std::mutex lock;
std::condition_variable wake;
bool disposed = false;
- rxu::error_ptr error;
auto dest = make_subscriber<T>(std::forward<ArgN>(an)...);
+ rxu::error_ptr error;
+ bool has_error = false;
+
// keep any error to rethrow at the end.
+ // copy 'dest' by-value to avoid using it after it goes out of scope.
auto scbr = make_subscriber<T>(
dest,
- [&](T t){dest.on_next(t);},
- [&](rxu::error_ptr e){
+ [dest](T t){dest.on_next(t);},
+ [dest,&error,&has_error,do_rethrow](rxu::error_ptr e){
if (do_rethrow) {
+ has_error = true;
error = e;
} else {
dest.on_error(e);
}
},
- [&](){dest.on_completed();}
+ [dest](){dest.on_completed();}
);
auto cs = scbr.get_subscription();
@@ -208,7 +212,7 @@ class blocking_observable
return disposed;
});
- if (error) {rxu::rethrow_exception(error);}
+ if (has_error) {rxu::rethrow_exception(error);}
}
public: