ice/turn transport: make sure PJSIP is initialized before it's used

Using PJSIP functions without calling pj_init first can lead to subtle
non-deterministic bugs.

GitLab: #18
Change-Id: I9364fd247165c0ce19a8d0d42575fb66651b54a3
diff --git a/src/turn/turn_transport.cpp b/src/turn/turn_transport.cpp
index 3ed4015..75525ff 100644
--- a/src/turn/turn_transport.cpp
+++ b/src/turn/turn_transport.cpp
@@ -147,7 +147,8 @@
 }
 
 TurnTransport::TurnTransport(const TurnTransportParams& params, std::function<void(bool)>&& cb, const std::shared_ptr<Logger>& logger)
-    : pimpl_ {new Impl(std::move(cb), logger)}
+    : pjInitLock_()
+    , pimpl_ {new Impl(std::move(cb), logger)}
 {
     auto server = params.server;
     if (!server.getPort())
diff --git a/src/turn/turn_transport.h b/src/turn/turn_transport.h
index b872454..37626b8 100644
--- a/src/turn/turn_transport.h
+++ b/src/turn/turn_transport.h
@@ -17,6 +17,7 @@
 #pragma once
 
 #include "ip_utils.h"
+#include "pj_init_lock.h"
 #include "turn_params.h"
 
 #include <opendht/logger.h>
@@ -48,6 +49,7 @@
 
 private:
     TurnTransport() = delete;
+    PjInitLock pjInitLock_;
     class Impl;
     std::unique_ptr<Impl> pimpl_;
 };