[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[vidalia-svn] r3127: Add some code for killing processes on Windows, and an error (in vidalia/trunk/src: common vidalia)



Author: edmanm
Date: 2008-09-21 18:09:00 -0400 (Sun, 21 Sep 2008)
New Revision: 3127

Modified:
   vidalia/trunk/src/common/procutil.cpp
   vidalia/trunk/src/common/procutil.h
   vidalia/trunk/src/vidalia/mainwindow.cpp
Log:
Add some code for killing processes on Windows, and an error message if the Reset button fails to do its thing.

Modified: vidalia/trunk/src/common/procutil.cpp
===================================================================
--- vidalia/trunk/src/common/procutil.cpp	2008-09-21 21:23:50 UTC (rev 3126)
+++ vidalia/trunk/src/common/procutil.cpp	2008-09-21 22:09:00 UTC (rev 3127)
@@ -115,10 +115,18 @@
 }
 
 bool
-process_kill(qint64 pid, QString *errmsg)
+process_kill(qint64 pid)
 {
 #if defined(Q_OS_WIN32)
-  return false;
+  HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE,
+                                static_cast<DWORD>(pid));
+  if (hProcess == NULL)
+    return false;
+
+  BOOL ret = TerminateProcess(hProcess, 0);
+  CloseHandle(hProcess);
+
+  return (ret != FALSE);
 #else
   return false;
 #endif

Modified: vidalia/trunk/src/common/procutil.h
===================================================================
--- vidalia/trunk/src/common/procutil.h	2008-09-21 21:23:50 UTC (rev 3126)
+++ vidalia/trunk/src/common/procutil.h	2008-09-21 22:09:00 UTC (rev 3127)
@@ -47,9 +47,8 @@
 QHash<qint64, QString> process_list();
 
 /** Attempt to kill process <b>pid</b>. Return true if the specified process
- * was successfully terminated. Otherwise, return false and set <b>errmsg</b>
- * to a string description of the failure. */
-bool process_kill(qint64 pid, QString *errmsg = 0);
+ * was successfully terminated. Otherwise, return false. */
+bool process_kill(qint64 pid);
 
 #endif
 

Modified: vidalia/trunk/src/vidalia/mainwindow.cpp
===================================================================
--- vidalia/trunk/src/vidalia/mainwindow.cpp	2008-09-21 21:23:50 UTC (rev 3126)
+++ vidalia/trunk/src/vidalia/mainwindow.cpp	2008-09-21 22:09:00 UTC (rev 3127)
@@ -1161,7 +1161,7 @@
 
 #if defined(Q_OS_WIN32)
     QHash<qint64, QString> procs = process_list();
-    foreach (qint64 pid, procs) {
+    foreach (qint64 pid, procs.keys()) {
       if (! procs.value(pid).compare("tor.exe", Qt::CaseInsensitive)) {
         torPid = pid;
         break;
@@ -1186,9 +1186,13 @@
       }
       retry = true;
     } else if (ret == QDialogButtonBox::Reset) {
-      QString processError;
-      if (! process_kill(torPid, &processError)) {
-        /* TODO: Display a helpful error message. */
+      if (! process_kill(torPid)) {
+        VMessageBox::warning(this,
+          tr("Password Reset Failed"),
+          p(tr("Vidalia tried to reset Tor's control password, but was not "
+               "able to restart the Tor software. Please check your Task "
+               "Manager to ensure there are no other Tor processes running.")),
+               VMessageBox::Ok|VMessageBox::Default);
       } else {
         retry = true;
       }