|
|
@ -25,7 +25,7 @@ namespace transport |
|
|
|
{ |
|
|
|
{ |
|
|
|
template<typename Keys> |
|
|
|
template<typename Keys> |
|
|
|
EphemeralKeysSupplier<Keys>::EphemeralKeysSupplier (int size): |
|
|
|
EphemeralKeysSupplier<Keys>::EphemeralKeysSupplier (int size): |
|
|
|
m_QueueSize (size), m_IsRunning (false), m_Thread (nullptr) |
|
|
|
m_QueueSize (size), m_IsRunning (false) |
|
|
|
{ |
|
|
|
{ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -39,7 +39,7 @@ namespace transport |
|
|
|
void EphemeralKeysSupplier<Keys>::Start () |
|
|
|
void EphemeralKeysSupplier<Keys>::Start () |
|
|
|
{ |
|
|
|
{ |
|
|
|
m_IsRunning = true; |
|
|
|
m_IsRunning = true; |
|
|
|
m_Thread = new std::thread (std::bind (&EphemeralKeysSupplier<Keys>::Run, this)); |
|
|
|
m_Thread.reset (new std::thread (std::bind (&EphemeralKeysSupplier<Keys>::Run, this))); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
template<typename Keys> |
|
|
|
template<typename Keys> |
|
|
@ -53,8 +53,7 @@ namespace transport |
|
|
|
if (m_Thread) |
|
|
|
if (m_Thread) |
|
|
|
{ |
|
|
|
{ |
|
|
|
m_Thread->join (); |
|
|
|
m_Thread->join (); |
|
|
|
delete m_Thread; |
|
|
|
m_Thread = nullptr; |
|
|
|
m_Thread = 0; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -78,6 +77,7 @@ namespace transport |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
m_KeysPool.CleanUpMt (); |
|
|
|
std::unique_lock<std::mutex> l(m_AcquiredMutex); |
|
|
|
std::unique_lock<std::mutex> l(m_AcquiredMutex); |
|
|
|
if (!m_IsRunning) break; |
|
|
|
if (!m_IsRunning) break; |
|
|
|
m_Acquired.wait (l); // wait for element gets acquired
|
|
|
|
m_Acquired.wait (l); // wait for element gets acquired
|
|
|
@ -92,7 +92,7 @@ namespace transport |
|
|
|
{ |
|
|
|
{ |
|
|
|
for (int i = 0; i < num; i++) |
|
|
|
for (int i = 0; i < num; i++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
auto pair = std::make_shared<Keys> (); |
|
|
|
auto pair = m_KeysPool.AcquireSharedMt (); |
|
|
|
pair->GenerateKeys (); |
|
|
|
pair->GenerateKeys (); |
|
|
|
std::unique_lock<std::mutex> l(m_AcquiredMutex); |
|
|
|
std::unique_lock<std::mutex> l(m_AcquiredMutex); |
|
|
|
m_Queue.push (pair); |
|
|
|
m_Queue.push (pair); |
|
|
@ -114,7 +114,7 @@ namespace transport |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// queue is empty, create new
|
|
|
|
// queue is empty, create new
|
|
|
|
auto pair = std::make_shared<Keys> (); |
|
|
|
auto pair = m_KeysPool.AcquireSharedMt (); |
|
|
|
pair->GenerateKeys (); |
|
|
|
pair->GenerateKeys (); |
|
|
|
return pair; |
|
|
|
return pair; |
|
|
|
} |
|
|
|
} |
|
|
|