diff --git a/common/kicad_curl/kicad_curl_easy.cpp b/common/kicad_curl/kicad_curl_easy.cpp
index 6b87b5e842..8b0207b722 100644
--- a/common/kicad_curl/kicad_curl_easy.cpp
+++ b/common/kicad_curl/kicad_curl_easy.cpp
@@ -120,7 +120,8 @@ static int progressinfo( void* aProgress, double aDLtotal, double aDLnow, double
 
 
 KICAD_CURL_EASY::KICAD_CURL_EASY() :
-        m_headers( nullptr )
+        m_headers( nullptr ),
+        m_curlSharedLock( KICAD_CURL::Mutex() )
 {
     m_CURL = curl_easy_init();
 
@@ -200,12 +201,6 @@ KICAD_CURL_EASY::~KICAD_CURL_EASY()
 
 int KICAD_CURL_EASY::Perform()
 {
-    std::shared_lock lock( KICAD_CURL::Mutex(), std::try_to_lock );
-
-    // If can't lock, we should be in the process of tearing down.
-    if( !lock )
-        return CURLE_ABORTED_BY_CALLBACK;
-
     if( m_headers )
         curl_easy_setopt( m_CURL, CURLOPT_HTTPHEADER, m_headers );
 
diff --git a/include/kicad_curl/kicad_curl_easy.h b/include/kicad_curl/kicad_curl_easy.h
index e837d19052..dbc9e605d3 100644
--- a/include/kicad_curl/kicad_curl_easy.h
+++ b/include/kicad_curl/kicad_curl_easy.h
@@ -39,6 +39,7 @@
 #include <ostream>
 #include <string>
 #include <cstdint>
+#include <shared_mutex>
 
 typedef void CURL;
 struct curl_slist;
@@ -163,10 +164,11 @@ private:
     template <typename T>
     int setOption( int aOption, T aArg );
 
-    CURL*                          m_CURL;
-    curl_slist*                    m_headers;
-    std::string                    m_buffer;
-    std::unique_ptr<CURL_PROGRESS> progress;
+    CURL*                               m_CURL;
+    curl_slist*                         m_headers;
+    std::string                         m_buffer;
+    std::unique_ptr<CURL_PROGRESS>      progress;
+    std::shared_lock<std::shared_mutex> m_curlSharedLock;
 };