From 123b4ca460aec74a72d1bc2507b5870bb19e95d8 Mon Sep 17 00:00:00 2001 From: zab2 <zab2@mail.i2p> Date: Mon, 9 Nov 2015 17:48:19 +0000 Subject: [PATCH] Fix locking on _nextExpire field --- .../transport/OutboundMessageRegistry.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/router/java/src/net/i2p/router/transport/OutboundMessageRegistry.java b/router/java/src/net/i2p/router/transport/OutboundMessageRegistry.java index 9c04f52b63..9a5661b5f2 100644 --- a/router/java/src/net/i2p/router/transport/OutboundMessageRegistry.java +++ b/router/java/src/net/i2p/router/transport/OutboundMessageRegistry.java @@ -258,6 +258,7 @@ public class OutboundMessageRegistry { public void renderStatusHTML(Writer out) throws IOException {} private class CleanupTask extends SimpleTimer2.TimedEvent { + /** LOCKING: _selectors */ private long _nextExpire; public CleanupTask() { @@ -325,23 +326,28 @@ public class OutboundMessageRegistry { if (log) { int e = removing.size(); - int r = _selectors.size(); + int r; + synchronized(_selectors) { + r = _selectors.size(); + } int a = _activeMessages.size(); if (r > 0 || e > 0 || a > 0) _log.debug("Expired: " + e + " remaining: " + r + " active: " + a); } - synchronized(this) { + synchronized(_selectors) { if (_nextExpire <= now) _nextExpire = now + 10*1000; schedule(_nextExpire - now); } } - public synchronized void scheduleExpiration(MessageSelector sel) { + public void scheduleExpiration(MessageSelector sel) { long now = _context.clock().now(); - if ( (_nextExpire <= now) || (sel.getExpiration() < _nextExpire) ) { - _nextExpire = sel.getExpiration(); - reschedule(_nextExpire - now); + synchronized(_selectors) { + if ( (_nextExpire <= now) || (sel.getExpiration() < _nextExpire) ) { + _nextExpire = sel.getExpiration(); + reschedule(_nextExpire - now); + } } } } -- GitLab