Browse Source

wrong add...

synchronous Release_2.1.0-RC12
Volker Birk 5 years ago
parent
commit
89459b946c
  1. 1
      callback_dispatcher.cc
  2. 3
      callback_dispatcher.hh
  3. 23
      passphrase_cache.cc

1
callback_dispatcher.cc

@ -29,7 +29,6 @@ namespace pEp {
throw std::invalid_argument("messageToSend must be set"); throw std::invalid_argument("messageToSend must be set");
targets.push_back({messageToSend, notifyHandshake, on_startup, shutdown}); targets.push_back({messageToSend, notifyHandshake, on_startup, shutdown});
semaphore.go();
} }
void CallbackDispatcher::remove(::messageToSend_t messageToSend) void CallbackDispatcher::remove(::messageToSend_t messageToSend)

3
callback_dispatcher.hh

@ -5,6 +5,7 @@
#include <mutex> #include <mutex>
#include "Adapter.hh" #include "Adapter.hh"
#include "Semaphore.hh" #include "Semaphore.hh"
#include "passphrase_cache.hh"
namespace pEp { namespace pEp {
// use this class when implementing a desktop adapter // use this class when implementing a desktop adapter
@ -46,6 +47,8 @@ namespace pEp {
PEP_STATUS _messageToSend(::message *msg); PEP_STATUS _messageToSend(::message *msg);
PEP_STATUS _notifyHandshake(::pEp_identity *me, PEP_STATUS _notifyHandshake(::pEp_identity *me,
::pEp_identity *partner, ::sync_handshake_signal signal); ::pEp_identity *partner, ::sync_handshake_signal signal);
friend const char *PassphraseCache::add(const std::string& passphrase);
}; };
extern CallbackDispatcher callback_dispatcher; extern CallbackDispatcher callback_dispatcher;

23
passphrase_cache.cc

@ -1,6 +1,7 @@
#include <cassert> #include <cassert>
#include "Adapter.hh" #include "Adapter.hh"
#include "passphrase_cache.hh" #include "passphrase_cache.hh"
#include "callback_dispatcher.hh"
pEp::PassphraseCache pEp::passphrase_cache; pEp::PassphraseCache pEp::passphrase_cache;
@ -35,15 +36,19 @@ namespace pEp {
const char *PassphraseCache::add(const std::string& passphrase) const char *PassphraseCache::add(const std::string& passphrase)
{ {
if (!passphrase.empty()) { if (!passphrase.empty()) {
std::lock_guard<std::mutex> lock(_mtx); const char *result = nullptr;
{
while (_cache.size() >= _max_size) std::lock_guard<std::mutex> lock(_mtx);
_cache.pop_front();
while (_cache.size() >= _max_size)
_cache.push_back({passphrase, clock::now()}); _cache.pop_front();
auto back = _cache.end();
assert(!_cache.empty()); _cache.push_back({passphrase, clock::now()});
auto result = (--back)->passphrase.c_str(); auto back = _cache.end();
assert(!_cache.empty());
result = (--back)->passphrase.c_str();
}
callback_dispatcher.semaphore.go();
return result; return result;
} }

Loading…
Cancel
Save