You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pa...@apache.org on 2020/12/15 22:50:08 UTC

[felix-dev] branch issues/FELIX-6163 created (now 2e18682)

This is an automated email from the ASF dual-hosted git repository.

pauls pushed a change to branch issues/FELIX-6163
in repository https://gitbox.apache.org/repos/asf/felix-dev.git.


      at 2e18682  FELIX-6163: do not use System.currentTimeMillis() to check timeouts

This branch includes the following new commits:

     new 2e18682  FELIX-6163: do not use System.currentTimeMillis() to check timeouts

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[felix-dev] 01/01: FELIX-6163: do not use System.currentTimeMillis() to check timeouts

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

pauls pushed a commit to branch issues/FELIX-6163
in repository https://gitbox.apache.org/repos/asf/felix-dev.git

commit 2e1868296881641cacbe7bed47fda5111f61445f
Author: Karl Pauls <ka...@gmail.com>
AuthorDate: Tue Dec 15 23:49:47 2020 +0100

    FELIX-6163: do not use System.currentTimeMillis() to check timeouts
---
 .../src/main/java/org/apache/felix/framework/util/ThreadGate.java   | 6 ++++--
 framework/src/main/java/org/osgi/util/tracker/ServiceTracker.java   | 5 +++--
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/framework/src/main/java/org/apache/felix/framework/util/ThreadGate.java b/framework/src/main/java/org/apache/felix/framework/util/ThreadGate.java
index f9900a3..ff52080 100644
--- a/framework/src/main/java/org/apache/felix/framework/util/ThreadGate.java
+++ b/framework/src/main/java/org/apache/felix/framework/util/ThreadGate.java
@@ -18,6 +18,8 @@
  */
 package org.apache.felix.framework.util;
 
+import java.util.concurrent.TimeUnit;
+
 /**
  * This class implements a simple one-shot gate for threads. The gate
  * starts closed and will block any threads that try to wait on it. Once
@@ -72,14 +74,14 @@ public class ThreadGate
     **/
     public synchronized boolean await(long timeout) throws InterruptedException
     {
-        long start = System.currentTimeMillis();
+        long start = TimeUnit.NANOSECONDS.toMillis(System.nanoTime());
         long remaining = timeout;
         while (!m_open)
         {
             wait(remaining);
             if (timeout > 0)
             {
-                remaining = timeout - (System.currentTimeMillis() - start);
+                remaining = timeout - (TimeUnit.NANOSECONDS.toMillis(System.nanoTime()) - start);
                 if (remaining <= 0)
                 {
                     break;
diff --git a/framework/src/main/java/org/osgi/util/tracker/ServiceTracker.java b/framework/src/main/java/org/osgi/util/tracker/ServiceTracker.java
index 42c176c..45b1f32 100644
--- a/framework/src/main/java/org/osgi/util/tracker/ServiceTracker.java
+++ b/framework/src/main/java/org/osgi/util/tracker/ServiceTracker.java
@@ -20,6 +20,7 @@ import java.lang.reflect.Array;
 import java.util.Collections;
 import java.util.SortedMap;
 import java.util.TreeMap;
+import java.util.concurrent.TimeUnit;
 
 import org.osgi.annotation.versioning.ConsumerType;
 import org.osgi.framework.AllServiceListener;
@@ -493,7 +494,7 @@ public class ServiceTracker<S, T> implements ServiceTrackerCustomizer<S, T> {
 			return object;
 		}
 
-		final long endTime = (timeout == 0) ? 0 : (System.currentTimeMillis() + timeout);
+		final long endTime = (timeout == 0) ? 0 : (TimeUnit.NANOSECONDS.toMillis(System.nanoTime()) + timeout);
 		do {
 			final Tracked t = tracked();
 			if (t == null) { /* if ServiceTracker is not open */
@@ -506,7 +507,7 @@ public class ServiceTracker<S, T> implements ServiceTrackerCustomizer<S, T> {
 			}
 			object = getService();
 			if (endTime > 0) { // if we have a timeout
-				timeout = endTime - System.currentTimeMillis();
+				timeout = endTime - TimeUnit.NANOSECONDS.toMillis(System.nanoTime());
 				if (timeout <= 0) { // that has expired
 					break;
 				}