mirror of
https://github.com/Corsinvest/cv4pve-admin.git
synced 2026-04-25 12:55:57 +03:00
[PR #187] [MERGED] fix: prevent concurrent RefreshDataAsync calls with SemaphoreSlim #178
Labels
No labels
bug
bug
enhancement
feedback
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/cv4pve-admin#178
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/Corsinvest/cv4pve-admin/pull/187
Author: @franklupo
Created: 2/21/2026
Status: ✅ Merged
Merged: 2/21/2026
Merged by: @franklupo
Base:
main← Head:fix/refreshdata-semaphore-concurrency📝 Commits (1)
9899c3afix: prevent concurrent RefreshDataAsync calls with SemaphoreSlim📊 Changes
22 files changed (+285 additions, -146 deletions)
View changed files
📝
src/Corsinvest.ProxmoxVE.Admin.Core/Components/ProxmoxVE/Cluster/Replication.razor.cs(+1 -2)📝
src/Corsinvest.ProxmoxVE.Admin.Core/Components/ProxmoxVE/Cluster/ResourcesEx.razor.cs(+1 -2)📝
src/Corsinvest.ProxmoxVE.Admin.Core/Components/ProxmoxVE/Common/Tasks.razor.cs(+30 -13)📝
src/Corsinvest.ProxmoxVE.Admin.Core/Components/ProxmoxVE/Nodes/Charts.razor.cs(+1 -2)📝
src/Corsinvest.ProxmoxVE.Admin.Core/Components/ProxmoxVE/Nodes/Disks.razor.cs(+1 -2)📝
src/Corsinvest.ProxmoxVE.Admin.Core/Components/ProxmoxVE/Nodes/Replication.razor.cs(+38 -21)📝
src/Corsinvest.ProxmoxVE.Admin.Core/Components/ProxmoxVE/Nodes/Summary.razor.cs(+23 -4)📝
src/Corsinvest.ProxmoxVE.Admin.Core/Components/ProxmoxVE/Storage/Charts.razor.cs(+21 -2)📝
src/Corsinvest.ProxmoxVE.Admin.Core/Components/ProxmoxVE/Vm/Charts.razor.cs(+26 -8)📝
src/Corsinvest.ProxmoxVE.Admin.Core/Components/ProxmoxVE/Vm/Snapshot/Manager.razor.cs(+1 -2)📝
src/Corsinvest.ProxmoxVE.Admin.Core/Components/ProxmoxVE/Vm/Summary.razor.cs(+22 -4)📝
src/Corsinvest.ProxmoxVE.Admin.Core/Components/Widgets/WidgetDonutBase.razor.cs(+1 -2)📝
src/Corsinvest.ProxmoxVE.Admin.Core/Components/Widgets/WidgetInfoBase.razor.cs(+1 -2)📝
src/Corsinvest.ProxmoxVE.Admin.Core/Components/Widgets/WidgetSparklineBase.razor.cs(+1 -2)📝
src/Corsinvest.ProxmoxVE.Admin.Core/Components/Widgets/WidgetThumbDetailsBase.razor.cs(+1 -2)📝
src/Corsinvest.ProxmoxVE.Admin.Module.AutoSnap/Components/Status.razor.cs(+45 -32)📝
src/Corsinvest.ProxmoxVE.Admin.Module.AutoSnap/Components/Timeline.razor.cs(+45 -31)📝
src/Corsinvest.ProxmoxVE.Admin.Module.Resources/Components/Widgets/ClusterUsage/Gauge.razor.cs(+1 -2)📝
src/Corsinvest.ProxmoxVE.Admin.Module.Resources/Components/Widgets/ClusterUsage/GaugeStacked.razor.cs(+1 -2)📝
src/Corsinvest.ProxmoxVE.Admin.Module.Resources/Components/Widgets/ClusterUsage/Grid.razor.cs(+1 -2)...and 2 more files
📄 Description
Summary
SemaphoreSlim(1,1)protection to components called from background Timer threads (every 2s) to prevent overlapping async executionsif (_disposed) { return; }+if (!await _refreshLock.WaitAsync(0)) { return; }) into a single short-circuit expression across all already-protected componentsComponents receiving new SemaphoreSlim + IDisposable
ProxmoxVE/Common/Tasks— called by Vm/Nodes Manager timerProxmoxVE/Nodes/Replication,Summary— called by Nodes Manager timer (2s)ProxmoxVE/Storage/Charts— called by Storage Manager timer (30s)ProxmoxVE/Vm/Charts,Summary— called by Vm Manager timer (2s)AutoSnap/Status,Timeline— called via event notificationsUpdater/Scans— called via event notificationsComponents with compacted if-guard only (no logic change)
ProxmoxVE/Cluster/Replication,ResourcesExProxmoxVE/Nodes/Charts,DisksProxmoxVE/Vm/Snapshot/ManagerWidgets/WidgetDonutBase,WidgetInfoBase,WidgetSparklineBase,WidgetThumbDetailsBaseResources/Widgets/ClusterUsage/Gauge,GaugeStacked,GridResources/Widgets/Maps/RenderTest plan
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.