From f7d90648e319865512e30010761357a827e9912b Mon Sep 17 00:00:00 2001
From: orignal <i2porignal@yandex.ru>
Date: Wed, 26 Nov 2014 10:28:06 -0500
Subject: [PATCH] drop verifier not used anymore

---
 Identity.cpp   | 7 +++++++
 Identity.h     | 3 ++-
 RouterInfo.cpp | 8 ++++++--
 3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/Identity.cpp b/Identity.cpp
index f2be3ba7..65bcf84f 100644
--- a/Identity.cpp
+++ b/Identity.cpp
@@ -265,6 +265,13 @@ namespace data
 		}			
 	}	
 	
+	void IdentityEx::DropVerifier ()
+	{
+		auto verifier = m_Verifier;
+		m_Verifier = nullptr; // TODO: make this atomic
+		delete verifier;
+	}
+
 	PrivateKeys& PrivateKeys::operator=(const Keys& keys)
 	{
 		m_Public = Identity (keys);
diff --git a/Identity.h b/Identity.h
index 223134e6..f9fe00e5 100644
--- a/Identity.h
+++ b/Identity.h
@@ -135,7 +135,8 @@ namespace data
 			bool Verify (const uint8_t * buf, size_t len, const uint8_t * signature) const;
 			SigningKeyType GetSigningKeyType () const;
 			CryptoKeyType GetCryptoKeyType () const;
-			
+			void DropVerifier (); // to save memory			
+
 		private:
 
 			void CreateVerifier () const;
diff --git a/RouterInfo.cpp b/RouterInfo.cpp
index d50b3be0..14d338e9 100644
--- a/RouterInfo.cpp
+++ b/RouterInfo.cpp
@@ -101,8 +101,12 @@ namespace data
 		{	
 			// verify signature
 			int l = m_BufferLen - m_RouterIdentity.GetSignatureLen ();
-			if (!m_RouterIdentity.Verify ((uint8_t *)m_Buffer, l, (uint8_t *)m_Buffer + l))	
-				LogPrint (eLogError, "signature verification failed");
+			if (!m_RouterIdentity.Verify ((uint8_t *)m_Buffer, l, (uint8_t *)m_Buffer + l))
+			{	
+				LogPrint (eLogError, "signature verification failed");	
+				m_IsUnreachable = true;
+			}
+			m_RouterIdentity.DropVerifier ();
 		}	
 	}