From 8d1e790794539acf40b8abd94ac4ae78fde59749 Mon Sep 17 00:00:00 2001 From: Mike Bender Date: Tue, 3 Jan 2023 12:39:02 -0500 Subject: [PATCH] Fix TableViewportSubscription race condition (#3252) - Race condition was causing UI error with selectDistinct - TableViewportSubscription could initialize after it had already been closed - Check the status to see if we're already DONE before initializing - Close table if we're already DONE - Fixes #3251 --- .../client/api/subscription/TableViewportSubscription.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/web/client-api/src/main/java/io/deephaven/web/client/api/subscription/TableViewportSubscription.java b/web/client-api/src/main/java/io/deephaven/web/client/api/subscription/TableViewportSubscription.java index 4267fe7d6d3..da506e88e01 100644 --- a/web/client-api/src/main/java/io/deephaven/web/client/api/subscription/TableViewportSubscription.java +++ b/web/client-api/src/main/java/io/deephaven/web/client/api/subscription/TableViewportSubscription.java @@ -109,9 +109,13 @@ public TableViewportSubscription(double firstRow, double lastRow, Column[] colum this.original = existingTable; this.originalState = original.state(); copy = existingTable.copy(false).then(table -> new Promise<>((resolve, reject) -> { - // Wait until the state is running to copy it originalState.onRunning(newState -> { + if (this.status == Status.DONE) { + JsLog.debug("TableViewportSubscription closed before originalState.onRunning completed, ignoring"); + table.close(); + return; + } table.batch(batcher -> { batcher.customColumns(newState.getCustomColumns()); batcher.filter(newState.getFilters());