diff options
author | Szczepan Zalega <szczepan@nitrokey.com> | 2017-01-11 20:11:01 +0100 |
---|---|---|
committer | Szczepan Zalega <szczepan@nitrokey.com> | 2017-03-11 15:41:37 +0100 |
commit | 73eac5050abad1b8f0ddbc7e94a11170a640e130 (patch) | |
tree | 67eb6db096a4fb06da3ba19c4bbbcbb71805a90f /NitrokeyManager.cc | |
parent | 02189413ce463116694478fcdcb418fed7e42027 (diff) | |
download | libnitrokey-73eac5050abad1b8f0ddbc7e94a11170a640e130.tar.gz libnitrokey-73eac5050abad1b8f0ddbc7e94a11170a640e130.tar.bz2 |
Protect concurrent use with lock guard
Signed-off-by: Szczepan Zalega <szczepan@nitrokey.com>
Diffstat (limited to 'NitrokeyManager.cc')
-rw-r--r-- | NitrokeyManager.cc | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/NitrokeyManager.cc b/NitrokeyManager.cc index 73a704a..b270eb3 100644 --- a/NitrokeyManager.cc +++ b/NitrokeyManager.cc @@ -6,9 +6,13 @@ #include <unordered_map> #include <stick20_commands.h> #include "include/misc.h" +#include <mutex> namespace nitrokey{ + std::mutex mex_dev_com; + + template <typename T> void strcpyT(T& dest, const char* src){ @@ -58,6 +62,7 @@ namespace nitrokey{ bool NitrokeyManager::connect() { this->disconnect(); + std::lock_guard<std::mutex> lock(mex_dev_com); vector< shared_ptr<Device> > devices = { make_shared<Stick10>(), make_shared<Stick20>() }; for( auto & d : devices ){ if (d->connect()){ @@ -70,6 +75,7 @@ namespace nitrokey{ bool NitrokeyManager::connect(const char *device_model) { this->disconnect(); + std::lock_guard<std::mutex> lock(mex_dev_com); switch (device_model[0]){ case 'P': device = make_shared<Stick10>(); @@ -90,7 +96,10 @@ namespace nitrokey{ return _instance; } + + bool NitrokeyManager::disconnect() { + std::lock_guard<std::mutex> lock(mex_dev_com); if (!is_connected()){ return false; } @@ -99,7 +108,7 @@ namespace nitrokey{ return res; } - bool NitrokeyManager::is_connected(){ + bool NitrokeyManager::is_connected() const throw(){ return device != nullptr; } |