From 6a67124e1c54dd3db065f73d1825b86b8810f1d6 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Tue, 5 Jan 2021 15:05:12 -0800 Subject: [PATCH] fix: limit number of tracked unused Deferred objects to 10 (#189) --- .../playwright/impl/ChannelOwner.java | 2 +- .../microsoft/playwright/impl/Connection.java | 21 +++++++++++++++---- .../playwright/impl/PlaywrightImpl.java | 13 +----------- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/ChannelOwner.java b/playwright/src/main/java/com/microsoft/playwright/impl/ChannelOwner.java index eb82c4ce..321c71f0 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/ChannelOwner.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/ChannelOwner.java @@ -104,7 +104,7 @@ class ChannelOwner { @Override protected void finalize() { if (constructionStackTrace != null) { - connection.unusedDeferredObjects.add(constructionStackTrace); + connection.addUnusedDeferredObject(constructionStackTrace); } } }; diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/Connection.java b/playwright/src/main/java/com/microsoft/playwright/impl/Connection.java index 0dc576aa..ea349ce6 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/Connection.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/Connection.java @@ -20,9 +20,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.microsoft.playwright.PlaywrightException; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.*; import java.time.Duration; import java.util.*; @@ -56,7 +54,7 @@ public class Connection { private final Root root; private int lastId = 0; private final Map> callbacks = new HashMap<>(); - final Deque unusedDeferredObjects = new ArrayDeque<>(); + private final Deque unusedDeferredObjects = new ArrayDeque<>(); class Root extends ChannelOwner { Root(Connection connection) { @@ -267,4 +265,19 @@ public class Connection { unusedDeferredObjects.removeLast(); } } + + void checkNoUnusedDeferredObjects() { + if (unusedDeferredObjects.isEmpty()) { + return; + } + List chunks = new ArrayList<>(); + chunks.add("Method get() has not been called on some Deferred<> objects. This indicates a " + + "bug in the client code. Here are some stack traces where such objects were constructed"); + for (Exception e : unusedDeferredObjects) { + StringWriter writer = new StringWriter(); + e.printStackTrace(new PrintWriter(writer)); + chunks.add(writer.toString()); + } + throw new PlaywrightException(String.join("\n", chunks)); + } } diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/PlaywrightImpl.java b/playwright/src/main/java/com/microsoft/playwright/impl/PlaywrightImpl.java index ce6a2a8d..f73c6984 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/PlaywrightImpl.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/PlaywrightImpl.java @@ -108,17 +108,6 @@ public class PlaywrightImpl extends ChannelOwner implements Playwright { System.err.println("WARNING: Timed out while waiting for driver process to exit"); } - if (connection.unusedDeferredObjects.isEmpty()) { - return; - } - List chunks = new ArrayList<>(); - chunks.add("Method get() has not been called on some Deferred<> objects. This indicates a " + - "bug in the client code. Here are some stack traces where such objects were constructed"); - for (Exception e : connection.unusedDeferredObjects) { - StringWriter writer = new StringWriter(); - e.printStackTrace(new PrintWriter(writer)); - chunks.add(writer.toString()); - } - throw new PlaywrightException(String.join("\n", chunks)); + connection.checkNoUnusedDeferredObjects(); } }