]> granicus.if.org Git - llvm/commitdiff
[Orc][RPC] Have handleOne abandon pending responses upon channel failure.
authorLang Hames <lhames@gmail.com>
Sun, 29 Jan 2017 04:25:16 +0000 (04:25 +0000)
committerLang Hames <lhames@gmail.com>
Sun, 29 Jan 2017 04:25:16 +0000 (04:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293411 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ExecutionEngine/Orc/RPCUtils.h

index 4f4617956a8f8fe4e191168a44bb58b26ae2c07a..c0ea94897be5609d65e8d34720f86ecab42288ee 100644 (file)
@@ -845,8 +845,10 @@ public:
   Error handleOne() {
     FunctionIdT FnId;
     SequenceNumberT SeqNo;
-    if (auto Err = C.startReceiveMessage(FnId, SeqNo))
+    if (auto Err = C.startReceiveMessage(FnId, SeqNo)) {
+      abandonPendingResponses();
       return Err;
+    }
     if (FnId == ResponseId)
       return handleResponse(SeqNo);
     auto I = Handlers.find(FnId);
@@ -1250,7 +1252,6 @@ public:
               return Error::success();
             },
             Args...)) {
-      this->abandonPendingResponses();
       detail::ResultTraits<typename Func::ReturnType>::consumeAbandoned(
           std::move(Result));
       return std::move(Err);
@@ -1258,7 +1259,6 @@ public:
 
     while (!ReceivedResponse) {
       if (auto Err = this->handleOne()) {
-        this->abandonPendingResponses();
         detail::ResultTraits<typename Func::ReturnType>::consumeAbandoned(
             std::move(Result));
         return std::move(Err);