From de9d968b763cb25cde305a2e8688e3751a47c611 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Wed, 27 Mar 2019 12:32:23 +0000
Subject: [PATCH] DatabaseEntry: Change from volatile to synched

---
 core/java/src/net/i2p/data/DatabaseEntry.java | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/core/java/src/net/i2p/data/DatabaseEntry.java b/core/java/src/net/i2p/data/DatabaseEntry.java
index 7a3fadd97c..77638daa0a 100644
--- a/core/java/src/net/i2p/data/DatabaseEntry.java
+++ b/core/java/src/net/i2p/data/DatabaseEntry.java
@@ -59,8 +59,9 @@ public abstract class DatabaseEntry extends DataStructureImpl {
     public final static int KEY_TYPE_SERVICE_LIST = 11;
 
     protected volatile Signature _signature;
-    protected volatile Hash _currentRoutingKey;
-    protected volatile long _routingKeyGenMod;
+    // synch: this
+    private Hash _currentRoutingKey;
+    private long _routingKeyGenMod;
 
     /**
      * A common interface to the timestamp of the two subclasses.
@@ -153,11 +154,13 @@ public abstract class DatabaseEntry extends DataStructureImpl {
             throw new IllegalStateException("Not in router context");
         RoutingKeyGenerator gen = ctx.routingKeyGenerator();
         long mod = gen.getLastChanged();
-        if (mod != _routingKeyGenMod) {
-            _currentRoutingKey = gen.getRoutingKey(getHash());
-            _routingKeyGenMod = mod;
+        synchronized(this) {
+            if (mod != _routingKeyGenMod) {
+                _currentRoutingKey = gen.getRoutingKey(getHash());
+                _routingKeyGenMod = mod;
+            }
+            return _currentRoutingKey;
         }
-        return _currentRoutingKey;
     }
 
     /**
-- 
GitLab