aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/deps/0004-rpclib-fix-hang-on-connection-error-during-construct.patch
blob: c20eef0edce1d28494670602127d16fe0fd425c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
From 22f1bc70f5033f2848f1d97059ba05cad8aa88a0 Mon Sep 17 00:00:00 2001
From: Mark Meserve <mark.meserve@ni.com>
Date: Mon, 7 Oct 2019 18:53:59 -0500
Subject: [PATCH] rpclib: fix hang on connection error during construction

---
 host/lib/deps/rpclib/lib/rpc/client.cc | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/host/lib/deps/rpclib/lib/rpc/client.cc b/host/lib/deps/rpclib/lib/rpc/client.cc
index 219bc3480..1b366e491 100644
--- a/host/lib/deps/rpclib/lib/rpc/client.cc
+++ b/host/lib/deps/rpclib/lib/rpc/client.cc
@@ -46,8 +46,8 @@ struct client::impl {
         boost::asio::async_connect(
             writer_->socket_, endpoint_iterator,
             [this](boost::system::error_code ec, tcp::resolver::iterator) {
+                std::unique_lock<std::mutex> lock(mut_connection_finished_);
                 if (!ec) {
-                    std::unique_lock<std::mutex> lock(mut_connection_finished_);
                     LOG_INFO("Client connected to {}:{}", addr_, port_);
                     is_connected_ = true;
                     state_ = client::connection_state::connected;
@@ -55,6 +55,9 @@ struct client::impl {
                     do_read();
                 } else {
                     LOG_ERROR("Error during connection: {}", ec);
+                    is_connected_ = false;
+                    state_ = client::connection_state::disconnected;
+                    conn_finished_.notify_all();
                 }
             });
     }
-- 
2.13.2.windows.1