[virt-tools-list] [PATCH virt-viewer 6/6] Use a mutex to check if VirtViewer running
Marc-André Lureau
marcandre.lureau at gmail.com
Fri Oct 19 22:57:31 UTC 2012
We need to warn user that installer can't proceed if there is already
a running instance of VirtViewer or of the installer.
https://bugzilla.redhat.com/show_bug.cgi?id=864033
---
data/virt-viewer.nsis.in | 10 ++++++++++
src/virt-viewer-util.c | 9 +++++++++
2 files changed, 19 insertions(+)
diff --git a/data/virt-viewer.nsis.in b/data/virt-viewer.nsis.in
index 45af104..d73fd73 100644
--- a/data/virt-viewer.nsis.in
+++ b/data/virt-viewer.nsis.in
@@ -45,6 +45,16 @@ Function RegisterApplication
WriteRegDWord HKCU "${REG_IEPOLICY}" "Policy" 3
FunctionEnd
+Function .onInit
+retry:
+ System::Call 'kernel32::CreateMutexA(i 0, i 0, t "VirtViewerMutex") i .r1 ?e'
+ Pop $R0
+ StrCmp $R0 0 +3
+ MessageBox MB_ICONEXCLAMATION|MB_RETRYCANCEL "VirtViewer is already running, quit any instance and retry." IDRETRY retry IDCANCEL cancel
+cancel:
+ Abort
+FunctionEnd
+
Section "VirtViewer"
SectionIn RO
WriteRegStr HKCU "Software\virt-viewer" "" $INSTDIR
diff --git a/src/virt-viewer-util.c b/src/virt-viewer-util.c
index 556638c..e99b106 100644
--- a/src/virt-viewer-util.c
+++ b/src/virt-viewer-util.c
@@ -263,6 +263,15 @@ gulong virt_viewer_signal_connect_object(gpointer instance,
void virt_viewer_util_init(const gchar *appname)
{
#ifdef G_OS_WIN32
+ /*
+ * This named mutex will be kept around by Windows until the
+ * process terminates. This allows other instances to check if it
+ * already exists, indicating already running instances. It is
+ * used to warn the user that installer can't proceed in this
+ * case.
+ */
+ CreateMutexA(0, 0, "VirtViewerMutex");
+
if (AttachConsole(ATTACH_PARENT_PROCESS) != 0) {
freopen("CONIN$", "r", stdin);
freopen("CONOUT$", "w", stdout);
--
1.7.11.7
More information about the virt-tools-list
mailing list