From 73c3ec709896a6c91d526603e11a208f764db4e4 Mon Sep 17 00:00:00 2001 From: Luke Butters Date: Mon, 14 Sep 2026 14:38:56 +1000 Subject: [PATCH 1/2] Add logging to track down why Calamari hangs when running clean packages --- .../Features/Processes/ScriptIsolation/LockOptionsResolver.cs | 1 + .../Features/Processes/Semaphores/SystemSemaphoreManager.cs | 3 +++ .../Deployment/PackageRetention/Model/PackageJournal.cs | 2 ++ 3 files changed, 6 insertions(+) diff --git a/source/Calamari.Common/Features/Processes/ScriptIsolation/LockOptionsResolver.cs b/source/Calamari.Common/Features/Processes/ScriptIsolation/LockOptionsResolver.cs index d68fd1f5f7..b8893e3bf4 100644 --- a/source/Calamari.Common/Features/Processes/ScriptIsolation/LockOptionsResolver.cs +++ b/source/Calamari.Common/Features/Processes/ScriptIsolation/LockOptionsResolver.cs @@ -14,6 +14,7 @@ public sealed class LockOptionsResolver( { public LockOptions? Create(RequestedLockOptions requestedOptions) { + log.Verbose($"Creating lock for lock options: {requestedOptions.Type} {requestedOptions.MutexName}"); var lockDirectory = lockDirectoryFactory.Create(requestedOptions.PreferredLockDirectory); var lockFile = lockDirectory.GetLockFile($"ScriptIsolation.{requestedOptions.MutexName}.lock"); diff --git a/source/Calamari.Common/Features/Processes/Semaphores/SystemSemaphoreManager.cs b/source/Calamari.Common/Features/Processes/Semaphores/SystemSemaphoreManager.cs index 0e232ffd75..c5db3e2fb3 100644 --- a/source/Calamari.Common/Features/Processes/Semaphores/SystemSemaphoreManager.cs +++ b/source/Calamari.Common/Features/Processes/Semaphores/SystemSemaphoreManager.cs @@ -111,6 +111,7 @@ IDisposable AcquireMutex(string name, string waitMessage) [SupportedOSPlatform("windows")] void SetFullAccessControlForAllUsers(Semaphore semaphore, string name) { + log.Verbose($"Setting full control for all users on semaphore '{name}'"); var semaphoreSecurity = new SemaphoreSecurity(); var everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null); var rule = new SemaphoreAccessRule(everyone, SemaphoreRights.FullControl, AccessControlType.Allow); @@ -125,6 +126,8 @@ void SetFullAccessControlForAllUsers(Semaphore semaphore, string name) { log.Verbose($"Failed to set access controls on semaphore '{name}': {e.PrettyPrint()}"); } + + log.Verbose($"Set full control for all users on semaphore '{name}'"); } class Releaser : IDisposable diff --git a/source/Calamari/Deployment/PackageRetention/Model/PackageJournal.cs b/source/Calamari/Deployment/PackageRetention/Model/PackageJournal.cs index 4025c03672..020e2c2970 100644 --- a/source/Calamari/Deployment/PackageRetention/Model/PackageJournal.cs +++ b/source/Calamari/Deployment/PackageRetention/Model/PackageJournal.cs @@ -79,8 +79,10 @@ public void ApplyRetention() { try { + log.Verbose("Acquiring semaphore before applying package retention."); using (AcquireSemaphore()) { + log.Verbose("Loading journal and applying retention."); journalRepository.Load(); var packagesToRemove = retentionAlgorithms.SelectMany(algorithm => algorithm.GetPackagesToRemove(journalRepository.GetAllJournalEntries())); foreach (var package in packagesToRemove) From e335d14a24c14319e12473564575a2b1f26ac900 Mon Sep 17 00:00:00 2001 From: Luke Butters Date: Mon, 14 Sep 2026 16:03:53 +1000 Subject: [PATCH 2/2] . --- .../Features/Processes/Semaphores/SystemSemaphoreManager.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/Calamari.Common/Features/Processes/Semaphores/SystemSemaphoreManager.cs b/source/Calamari.Common/Features/Processes/Semaphores/SystemSemaphoreManager.cs index c5db3e2fb3..ca35c82691 100644 --- a/source/Calamari.Common/Features/Processes/Semaphores/SystemSemaphoreManager.cs +++ b/source/Calamari.Common/Features/Processes/Semaphores/SystemSemaphoreManager.cs @@ -121,13 +121,12 @@ void SetFullAccessControlForAllUsers(Semaphore semaphore, string name) try { semaphore.SetAccessControl(semaphoreSecurity); + log.Verbose($"Set full control for all users on semaphore '{name}'"); } catch (Exception e) { log.Verbose($"Failed to set access controls on semaphore '{name}': {e.PrettyPrint()}"); } - - log.Verbose($"Set full control for all users on semaphore '{name}'"); } class Releaser : IDisposable