From b83b7bbf8256b58fe0fdf3e4d8defdd3ebd55a1c Mon Sep 17 00:00:00 2001 From: James Nord Date: Sun, 24 May 2026 06:21:39 +0100 Subject: [PATCH] Fix race condition in plugin manager search results (#26819) Search responses could arrive out of order, allowing a stale response to overwrite the table after the user had typed a newer query. Track a request id and discard responses whose id no longer matches the latest request. Co-authored-by: Claude Opus 4.7 --- src/main/js/plugin-manager-ui.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/js/plugin-manager-ui.js b/src/main/js/plugin-manager-ui.js index 68ced0d0b0..a9367ea2e5 100644 --- a/src/main/js/plugin-manager-ui.js +++ b/src/main/js/plugin-manager-ui.js @@ -3,12 +3,19 @@ import debounce from "lodash/debounce"; import pluginManagerAvailable from "./templates/plugin-manager/available.hbs"; import pluginManager from "./api/pluginManager"; +var latestRequestId = 0; + function applyFilter(searchQuery) { // debounce reduces number of server side calls while typing + var requestId = ++latestRequestId; pluginManager.availablePluginsSearch( searchQuery.toLowerCase().trim(), 50, function (plugins) { + // Discard stale responses so they don't overwrite results for a newer query + if (requestId !== latestRequestId) { + return; + } var pluginsTable = document.getElementById("plugins"); var tbody = pluginsTable.querySelector("tbody"); var admin = pluginsTable.dataset.hasadmin === "true";