diff options
author | Dan Vrátil <dvratil@redhat.com> | 2015-02-07 17:45:18 +0100 |
---|---|---|
committer | Dan Vrátil <dvratil@redhat.com> | 2015-02-07 17:45:18 +0100 |
commit | da0bcaf6469311f03ba35d48a4a405c95594a686 (patch) | |
tree | 9b8ce8530e2e287db8020a9b338dd24bfd9b3322 /async/src | |
parent | b737a7deb5161d8b289c4c4bdfa324dccdb07dff (diff) | |
download | sink-da0bcaf6469311f03ba35d48a4a405c95594a686.tar.gz sink-da0bcaf6469311f03ba35d48a4a405c95594a686.zip |
Async: mark our future as finished after returning from error handler
Error handlers don't have access to the future, so they can't mark it as finished,
so we do it after the error handler is run. This ensures that FutureWatchers will
finish.
Diffstat (limited to 'async/src')
-rw-r--r-- | async/src/async.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/async/src/async.h b/async/src/async.h index a2a11ac..753a44f 100644 --- a/async/src/async.h +++ b/async/src/async.h | |||
@@ -342,6 +342,7 @@ void ThenExecutor<Out, In ...>::previousFutureReady() | |||
342 | if (this->mPrevFuture && this->mPrevFuture->errorCode()) { | 342 | if (this->mPrevFuture && this->mPrevFuture->errorCode()) { |
343 | if (this->mErrorFunc) { | 343 | if (this->mErrorFunc) { |
344 | this->mErrorFunc(this->mPrevFuture->errorCode(), this->mPrevFuture->errorMessage()); | 344 | this->mErrorFunc(this->mPrevFuture->errorCode(), this->mPrevFuture->errorMessage()); |
345 | this->mResult->setFinished(); | ||
345 | } else { | 346 | } else { |
346 | static_cast<Async::Future<Out>*>(this->mResult)->setError(this->mPrevFuture->errorCode(), this->mPrevFuture->errorMessage()); | 347 | static_cast<Async::Future<Out>*>(this->mResult)->setError(this->mPrevFuture->errorCode(), this->mPrevFuture->errorMessage()); |
347 | //propagate error if no error handler is available | 348 | //propagate error if no error handler is available |