summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Murashkin <iam@google.com>2019-11-13 12:12:29 -0800
committerandroid-build-merger <android-build-merger@google.com>2019-11-13 12:12:29 -0800
commit439b0fad1d24972948f96f58a8931ebe72d0ab29 (patch)
tree15ac6f89ad47dc0cbdcf740c91b0c0829d86c137
parent1222f0344b28cef8d7d75215ac1b3084c31b54dd (diff)
parent68b9bbe7851c0d5cc02629e13bc263d2462644a0 (diff)
downloadRxCpp-android11-qpr2-release.tar.gz
observable: Fix dangling use in #as_blocking am: f2bfb6033a am: 37d2a9fffbr_aml_301500702android-mainline-12.0.0_r55android-mainline-11.0.0_r9android-mainline-11.0.0_r8android-mainline-11.0.0_r7android-mainline-11.0.0_r6android-mainline-11.0.0_r5android-mainline-11.0.0_r45android-mainline-11.0.0_r44android-mainline-11.0.0_r43android-mainline-11.0.0_r42android-mainline-11.0.0_r41android-mainline-11.0.0_r40android-mainline-11.0.0_r4android-mainline-11.0.0_r39android-mainline-11.0.0_r38android-mainline-11.0.0_r37android-mainline-11.0.0_r36android-mainline-11.0.0_r35android-mainline-11.0.0_r34android-mainline-11.0.0_r33android-mainline-11.0.0_r32android-mainline-11.0.0_r31android-mainline-11.0.0_r30android-mainline-11.0.0_r3android-mainline-11.0.0_r29android-mainline-11.0.0_r28android-mainline-11.0.0_r27android-mainline-11.0.0_r26android-mainline-11.0.0_r25android-mainline-11.0.0_r24android-mainline-11.0.0_r23android-mainline-11.0.0_r22android-mainline-11.0.0_r21android-mainline-11.0.0_r20android-mainline-11.0.0_r2android-mainline-11.0.0_r19android-mainline-11.0.0_r18android-mainline-11.0.0_r17android-mainline-11.0.0_r16android-mainline-11.0.0_r15android-mainline-11.0.0_r14android-mainline-11.0.0_r13android-mainline-11.0.0_r12android-mainline-11.0.0_r10android-mainline-11.0.0_r1android-11.0.0_r9android-11.0.0_r8android-11.0.0_r7android-11.0.0_r48android-11.0.0_r47android-11.0.0_r46android-11.0.0_r45android-11.0.0_r44android-11.0.0_r43android-11.0.0_r42android-11.0.0_r41android-11.0.0_r40android-11.0.0_r39android-11.0.0_r38android-11.0.0_r37android-11.0.0_r36android-11.0.0_r35android-11.0.0_r34android-11.0.0_r33android-11.0.0_r32android-11.0.0_r31android-11.0.0_r30android-11.0.0_r29android-11.0.0_r28android-11.0.0_r27android-11.0.0_r26android-11.0.0_r24android-11.0.0_r23android-11.0.0_r22android-11.0.0_r21android-11.0.0_r20android-11.0.0_r19android-11.0.0_r18android-11.0.0_r16android-11.0.0_r15android-11.0.0_r14android-11.0.0_r13android-11.0.0_r12android-11.0.0_r11android-11.0.0_r10android11-qpr3-s1-releaseandroid11-qpr3-releaseandroid11-qpr2-releaseandroid11-qpr1-s2-releaseandroid11-qpr1-s1-releaseandroid11-qpr1-releaseandroid11-qpr1-d-s1-releaseandroid11-qpr1-d-releaseandroid11-qpr1-c-releaseandroid11-mainline-tethering-releaseandroid11-mainline-sparse-2021-jan-releaseandroid11-mainline-sparse-2020-dec-releaseandroid11-mainline-releaseandroid11-mainline-permission-releaseandroid11-mainline-os-statsd-releaseandroid11-mainline-networkstack-releaseandroid11-mainline-media-swcodec-releaseandroid11-mainline-media-releaseandroid11-mainline-extservices-releaseandroid11-mainline-documentsui-releaseandroid11-mainline-conscrypt-releaseandroid11-mainline-cellbroadcast-releaseandroid11-mainline-captiveportallogin-releaseandroid11-devandroid11-d2-releaseandroid11-d1-s7-releaseandroid11-d1-s6-releaseandroid11-d1-s5-releaseandroid11-d1-s1-releaseandroid11-d1-releaseandroid11-d1-b-release
am: 68b9bbe785 Change-Id: I49129dd47fd96e1de0c8caf7cdb48760ade71f86
-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: