summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorMatthew Newhook <matthew@zeroc.com>2014-08-08 16:48:43 -0230
committerMatthew Newhook <matthew@zeroc.com>2014-08-08 16:48:43 -0230
commit98a1b3ffe79fda923712c684ba08f67c2d9aed5e (patch)
treeb5be1ffb57fe5923943779f396c69da7ee59434c /java
parentFixed lots of warnings. (diff)
downloadice-98a1b3ffe79fda923712c684ba08f67c2d9aed5e.tar.bz2
ice-98a1b3ffe79fda923712c684ba08f67c2d9aed5e.tar.xz
ice-98a1b3ffe79fda923712c684ba08f67c2d9aed5e.zip
ICE-5630 - ACM timeout is broken
- Also refactored the code a bit in java so that the ACMMonitor doesn't inherit from runnable.
Diffstat (limited to 'java')
-rw-r--r--java/src/Ice/ConnectionI.java14
-rw-r--r--java/src/IceInternal/ACMMonitor.java2
-rw-r--r--java/src/IceInternal/ConnectionACMMonitor.java15
-rw-r--r--java/src/IceInternal/FactoryACMMonitor.java15
4 files changed, 29 insertions, 17 deletions
diff --git a/java/src/Ice/ConnectionI.java b/java/src/Ice/ConnectionI.java
index 3e8c735a99d..c835e398735 100644
--- a/java/src/Ice/ConnectionI.java
+++ b/java/src/Ice/ConnectionI.java
@@ -893,11 +893,7 @@ public final class ConnectionI extends IceInternal.EventHandler implements Conne
_monitor.remove(this);
}
_monitor = _monitor.acm(timeout, close, heartbeat);
- if(_state == StateActive)
- {
- _monitor.add(this);
- }
-
+
if(_monitor.getACM().timeout <= 0)
{
_acmLastActivity = -1; // Disable the recording of last activity.
@@ -906,6 +902,12 @@ public final class ConnectionI extends IceInternal.EventHandler implements Conne
{
_acmLastActivity = IceInternal.Time.currentMonotonicTimeMillis();
}
+
+ if(_state == StateActive)
+ {
+ _monitor.add(this);
+ }
+
}
}
@@ -2066,11 +2068,11 @@ public final class ConnectionI extends IceInternal.EventHandler implements Conne
{
if(state == StateActive)
{
- _monitor.add(this);
if(_acmLastActivity > 0)
{
_acmLastActivity = IceInternal.Time.currentMonotonicTimeMillis();
}
+ _monitor.add(this);
}
else if(_state == StateActive)
{
diff --git a/java/src/IceInternal/ACMMonitor.java b/java/src/IceInternal/ACMMonitor.java
index 5d592e62b22..7b9fad1bc3d 100644
--- a/java/src/IceInternal/ACMMonitor.java
+++ b/java/src/IceInternal/ACMMonitor.java
@@ -9,7 +9,7 @@
package IceInternal;
-public interface ACMMonitor extends Runnable
+public interface ACMMonitor
{
void add(Ice.ConnectionI con);
void remove(Ice.ConnectionI con);
diff --git a/java/src/IceInternal/ConnectionACMMonitor.java b/java/src/IceInternal/ConnectionACMMonitor.java
index 38c57189dd9..c0a135123fa 100644
--- a/java/src/IceInternal/ConnectionACMMonitor.java
+++ b/java/src/IceInternal/ConnectionACMMonitor.java
@@ -45,8 +45,14 @@ class ConnectionACMMonitor implements ACMMonitor
_connection = connection;
if(_config.timeout > 0)
{
- _future = _timer.scheduleAtFixedRate(this, _config.timeout / 2, _config.timeout / 2,
- java.util.concurrent.TimeUnit.MILLISECONDS);
+ _future = _timer.scheduleAtFixedRate(new Runnable() {
+ @Override
+ public void run()
+ {
+ monitorConnection();
+ }
+ },
+ _config.timeout / 2, _config.timeout / 2, java.util.concurrent.TimeUnit.MILLISECONDS);
}
}
@@ -88,9 +94,8 @@ class ConnectionACMMonitor implements ACMMonitor
return acm;
}
- @Override
- public void
- run()
+ private void
+ monitorConnection()
{
Ice.ConnectionI connection;
synchronized(this)
diff --git a/java/src/IceInternal/FactoryACMMonitor.java b/java/src/IceInternal/FactoryACMMonitor.java
index 420513ff9dd..0f9b6d18f00 100644
--- a/java/src/IceInternal/FactoryACMMonitor.java
+++ b/java/src/IceInternal/FactoryACMMonitor.java
@@ -77,8 +77,14 @@ class FactoryACMMonitor implements ACMMonitor
{
_connections.add(connection);
assert _future == null;
- _future = _instance.timer().scheduleAtFixedRate(this, _config.timeout / 2, _config.timeout / 2,
- java.util.concurrent.TimeUnit.MILLISECONDS);
+ _future = _instance.timer().scheduleAtFixedRate(new Runnable() {
+ @Override
+ public void run()
+ {
+ monitorConnections();
+ }
+ },
+ _config.timeout / 2, _config.timeout / 2, java.util.concurrent.TimeUnit.MILLISECONDS);
}
else
{
@@ -155,9 +161,8 @@ class FactoryACMMonitor implements ACMMonitor
return connections;
}
- @Override
- public void
- run()
+ private void
+ monitorConnections()
{
synchronized(this)
{