spinlock added

This commit is contained in:
orignal 2016-10-11 12:06:40 -04:00
parent b1f8f9830b
commit f17df1f16d

View File

@ -376,13 +376,16 @@ namespace data
void IdentityEx::UpdateVerifier (i2p::crypto::Verifier * verifier) const void IdentityEx::UpdateVerifier (i2p::crypto::Verifier * verifier) const
{ {
if (!m_Verifier || !verifier) if (!m_Verifier)
{ {
auto created = m_IsVerifierCreated.exchange (true); auto created = m_IsVerifierCreated.exchange (true);
if (!created) if (!created)
m_Verifier.reset (verifier); m_Verifier.reset (verifier);
else else
{
delete verifier; delete verifier;
while (!m_Verifier) ; // spin lock
}
} }
else else
delete verifier; delete verifier;
@ -391,7 +394,8 @@ namespace data
void IdentityEx::DropVerifier () const void IdentityEx::DropVerifier () const
{ {
// TODO: potential race condition with Verify // TODO: potential race condition with Verify
m_Verifier = nullptr; m_IsVerifierCreated = false;
m_Verifier = nullptr;
} }
PrivateKeys& PrivateKeys::operator=(const Keys& keys) PrivateKeys& PrivateKeys::operator=(const Keys& keys)