From 157190757b4fa2f725e0abd482ceb8938c6f483a Mon Sep 17 00:00:00 2001 From: zzz Date: Tue, 1 Sep 2009 13:47:27 +0000 Subject: [PATCH] * SessionKeyManager: - Fix TagSet hashCode - More synchronization --- .../crypto/TransientSessionKeyManager.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java b/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java index 57862c3b8..6f4706e26 100644 --- a/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java +++ b/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java @@ -699,10 +699,8 @@ public class TransientSessionKeyManager extends SessionKeyManager { */ List getTagSets() { List rv; - synchronized (_unackedTagSets) { - rv = new ArrayList(_unackedTagSets); - } synchronized (_tagSets) { + rv = new ArrayList(_unackedTagSets); rv.addAll(_tagSets); } return rv; @@ -714,17 +712,21 @@ public class TransientSessionKeyManager extends SessionKeyManager { * because the tagset was originally placed directly on the acked list. */ void ackTags(TagSet set) { - if (_unackedTagSets.remove(set)) { - _tagSets.add(set); - _acked = true; + synchronized (_tagSets) { + if (_unackedTagSets.remove(set)) { + _tagSets.add(set); + _acked = true; + } } set.setAcked(); } /** didn't get an ack for these tags */ void failTags(TagSet set) { - _unackedTagSets.remove(set); - _tagSets.remove(set); + synchronized (_tagSets) { + _unackedTagSets.remove(set); + _tagSets.remove(set); + } } public PublicKey getTarget() { @@ -919,6 +921,7 @@ public class TransientSessionKeyManager extends SessionKeyManager { /** only used in renderStatusHTML() for debugging */ public boolean getAcked() { return _acked; } +/****** this will return a dup if two in the same ms, so just use java @Override public int hashCode() { long rv = 0; @@ -936,6 +939,7 @@ public class TransientSessionKeyManager extends SessionKeyManager { //&& DataHelper.eq(ts.getTags(), getTags()) && ts.getDate() == _date; } +******/ @Override public String toString() {