[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[XENBUS PATCH v3 5/5] Check for active installation before autoreboot



If the _MSIExecute mutex is set, an MSI installation is under way.
We don't want to autoreboot in these situations either.

Signed-off-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
Reviewed-by: Paul Durrant <paul@xxxxxxx>
---
 src/monitor/monitor.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/src/monitor/monitor.c b/src/monitor/monitor.c
index 8a56c11..dd5fc13 100644
--- a/src/monitor/monitor.c
+++ b/src/monitor/monitor.c
@@ -686,6 +686,7 @@ TryAutoReboot(
 {
     PMONITOR_CONTEXT    Context = &MonitorContext;
     HRESULT             Result;
+    HANDLE              MsiMutex;
     DWORD               Type;
     DWORD               AutoReboot;
     DWORD               RebootCount;
@@ -711,6 +712,22 @@ TryAutoReboot(
     if (Context->Response == IDNO)
         goto done;
 
+    // Check if there's an installation under way.
+    MsiMutex = OpenMutex(SYNCHRONIZE,
+                         FALSE,
+                         TEXT("Global\\_MSIExecute"));
+    if (MsiMutex != NULL) {
+        Error = WaitForSingleObject(MsiMutex, 0);
+        if (Error == WAIT_OBJECT_0 || Error == WAIT_ABANDONED)
+            ReleaseMutex(MsiMutex);
+
+        CloseHandle(MsiMutex);
+
+        if (Error == WAIT_TIMEOUT)
+            // The only case where an installation is definitely running.
+            goto done;
+    }
+
     Status = CallNtPowerInformation(SystemExecutionState,
                                     NULL,
                                     0,
-- 
2.49.0.windows.1



Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.