From 100b7bc10dcb83f81d6bbd37eca1c8708c4dfbb6 Mon Sep 17 00:00:00 2001 From: cslashm Date: Mon, 26 Mar 2018 12:38:38 +0200 Subject: Change mutex lock model to avoid dead lock and ensure locks are always released. Additional cosmetic fixes: move 'name' as protected remove unnecessary local var Fix debug log --- src/device/device_ledger.hpp | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'src/device/device_ledger.hpp') diff --git a/src/device/device_ledger.hpp b/src/device/device_ledger.hpp index e06c5f72c..2053067bd 100644 --- a/src/device/device_ledger.hpp +++ b/src/device/device_ledger.hpp @@ -36,7 +36,8 @@ #include "device.hpp" #include #include - +#include +#include namespace hw { @@ -80,13 +81,11 @@ namespace hw { class device_ledger : public hw::device { private: - mutable std::mutex device_locker; - mutable std::mutex tx_locker; - void lock_device() ; - void unlock_device() ; - void lock_tx() ; - void unlock_tx() ; - + // Locker for concurrent access + mutable boost::recursive_mutex device_locker; + mutable boost::mutex command_locker; + + //PCSC management std::string full_name; SCARDCONTEXT hContext; SCARDHANDLE hCard; @@ -130,6 +129,14 @@ namespace hw { bool connect(void) override; bool disconnect() override; + + /* ======================================================================= */ + /* LOCKER */ + /* ======================================================================= */ + void lock(void) override; + void unlock(void) override; + bool try_lock(void) override; + /* ======================================================================= */ /* WALLET & ADDRESS */ /* ======================================================================= */ -- cgit v1.2.3