From fad58207d77499d99aff5b8187e76b8d643948a3 Mon Sep 17 00:00:00 2001 From: Volker Birk Date: Tue, 28 May 2019 16:45:09 +0200 Subject: [PATCH] ... --- Adapter.hxx | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/Adapter.hxx b/Adapter.hxx index 9c3a0e9..cd52a7c 100644 --- a/Adapter.hxx +++ b/Adapter.hxx @@ -17,8 +17,8 @@ namespace pEp { SYNC_EVENT _retrieve_next_sync_event(void *management, unsigned threshold); - std::exception_ptr _ex; - bool lpa_register_done = false; + static std::exception_ptr _ex; + static bool register_done = false; template< class T > void sync_thread(T *obj, function< void(T *) > _startup, function< void(T *) > _shutdown) { @@ -34,11 +34,11 @@ namespace pEp { _notifyHandshake, _retrieve_next_sync_event); try { throw_status(status); - lpa_register_done = true; + register_done = true; } catch (...) { _ex = std::current_exception(); - lpa_register_done = true; + register_done = true; return; } } @@ -69,19 +69,15 @@ namespace pEp { session(); - { - std::lock_guard lock(m); - - if (!_sync_thread) { - lpa_register_done = false; - _sync_thread = new std::thread(sync_thread, obj, _startup, _shutdown); - while (!lpa_register_done) - std::this_thread::sleep_for(std::chrono::milliseconds(100)); - - if (_ex) { - _sync_thread = nullptr; - std::rethrow_exception(_ex); - } + if (!_sync_thread) { + register_done = false; + _sync_thread = new std::thread(sync_thread, obj, _startup, _shutdown); + while (!register_done) + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + + if (_ex) { + _sync_thread = nullptr; + std::rethrow_exception(_ex); } } }