From cb0ea36bad6ea07e336c4a5d3ee2b00322893a8f Mon Sep 17 00:00:00 2001
From: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com>
Date: Mon, 9 May 2016 13:10:38 -0400
Subject: [PATCH] ringdht: check IceTransport::start() returns

IceTransport::start() return was not checked
causing error not handled correctly, resulting
by an unstable application.

This patch adds the necessary checks and request
the associated call to finish by a failure state
when such error happens.

Change-Id: I3f07f0b4d0cf0bbc0f7e3704c4cd0139b4c5e64e
Tuleap: #662
---
 src/ringdht/ringaccount.cpp | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/ringdht/ringaccount.cpp b/src/ringdht/ringaccount.cpp
index a4439285bf..9f28d891c7 100644
--- a/src/ringdht/ringaccount.cpp
+++ b/src/ringdht/ringaccount.cpp
@@ -250,7 +250,10 @@ RingAccount::newOutgoingCall(const std::string& toUrl)
                           std::string(msg.ice_data.cbegin(), msg.ice_data.cend()).c_str());
                 if (auto call = weak_call.lock())
                     call->setState(Call::ConnectionState::PROGRESSING);
-                ice->start(msg.ice_data);
+                if (!ice->start(msg.ice_data)) {
+                    call->onFailure();
+                    return true;
+                }
                 return false;
             }
         );
@@ -1005,7 +1008,10 @@ RingAccount::incomingCall(dht::IceCandidates&& msg)
             shared_this->dht_.cancelPut(shared_this->callKey_, vid);
         }
     );
-    ice->start(msg.ice_data);
+    if (!ice->start(msg.ice_data)) {
+        call->onFailure();
+        return;
+    }
     call->setPeerNumber(from);
     call->initRecFilename(from);
     {
-- 
GitLab