aboutsummaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'contrib')
-rw-r--r--contrib/epee/include/net/abstract_tcp_server2.inl2
-rw-r--r--contrib/epee/include/net/http_client.h30
-rw-r--r--contrib/valgrind/monero.supp9
3 files changed, 40 insertions, 1 deletions
diff --git a/contrib/epee/include/net/abstract_tcp_server2.inl b/contrib/epee/include/net/abstract_tcp_server2.inl
index f51ca88bf..3dca30006 100644
--- a/contrib/epee/include/net/abstract_tcp_server2.inl
+++ b/contrib/epee/include/net/abstract_tcp_server2.inl
@@ -1010,7 +1010,7 @@ POP_WARNINGS
boost::unique_lock<boost::mutex> lock(local_shared_context->connect_mut);
auto connect_callback = [](boost::system::error_code ec_, boost::shared_ptr<local_async_context> shared_context)
{
- shared_context->connect_mut.lock(); shared_context->ec = ec_; shared_context->connect_mut.unlock(); shared_context->cond.notify_one();
+ shared_context->connect_mut.lock(); shared_context->ec = ec_; shared_context->cond.notify_one(); shared_context->connect_mut.unlock();
};
sock_.async_connect(remote_endpoint, boost::bind<void>(connect_callback, _1, local_shared_context));
diff --git a/contrib/epee/include/net/http_client.h b/contrib/epee/include/net/http_client.h
index 3e8143738..336153384 100644
--- a/contrib/epee/include/net/http_client.h
+++ b/contrib/epee/include/net/http_client.h
@@ -156,6 +156,17 @@ using namespace std;
return csTmp;
}
+ static inline int get_index(const char *s, char c) { const char *ptr = (const char*)memchr(s, c, 16); return ptr ? ptr-s : -1; }
+ static inline
+ std::string hex_to_dec_2bytes(const char *s)
+ {
+ const char *hex = get_hex_vals();
+ int i0 = get_index(hex, toupper(s[0]));
+ int i1 = get_index(hex, toupper(s[1]));
+ if (i0 < 0 || i1 < 0)
+ return std::string("%") + std::string(1, s[0]) + std::string(1, s[1]);
+ return std::string(1, i0 * 16 | i1);
+ }
static inline std::string convert(char val)
{
@@ -180,6 +191,25 @@ using namespace std;
return result;
}
+ static inline std::string convert_from_url_format(const std::string& uri)
+ {
+
+ std::string result;
+
+ for(size_t i = 0; i!= uri.size(); i++)
+ {
+ if(uri[i] == '%' && i + 2 < uri.size())
+ {
+ result += hex_to_dec_2bytes(uri.c_str() + i + 1);
+ i += 2;
+ }
+ else
+ result += uri[i];
+
+ }
+
+ return result;
+ }
static inline std::string convert_to_url_format_force_all(const std::string& uri)
{
diff --git a/contrib/valgrind/monero.supp b/contrib/valgrind/monero.supp
index 1c400076e..16e34e82f 100644
--- a/contrib/valgrind/monero.supp
+++ b/contrib/valgrind/monero.supp
@@ -8,3 +8,12 @@
fun:_ULx86_64_step
...
}
+
+{
+ boost unlocks before signalling cond var
+ Helgrind:Misc
+ ...
+ fun:pthread_cond_signal@*
+ fun:maybe_unlock_and_signal_one<boost::asio::detail::scoped_lock<boost::asio::detail::posix_mutex> >
+ ...
+}