From 4aced3b84d92482bdd1958493391a1bdcd76a879 Mon Sep 17 00:00:00 2001
From: unknown <msvensson@pilot.mysql.com>
Date: Mon, 10 Mar 2008 12:54:46 +0100
Subject: [PATCH] Add retry logic for OpenEvent to avoid problems when the
 process to kill hasn't yet created the event

---
 .../lib/My/SafeProcess/safe_kill_win.cc       | 28 ++++++++++++++++---
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/mysql-test/lib/My/SafeProcess/safe_kill_win.cc b/mysql-test/lib/My/SafeProcess/safe_kill_win.cc
index 74bb573eac..a9a4b08b9e 100755
--- a/mysql-test/lib/My/SafeProcess/safe_kill_win.cc
+++ b/mysql-test/lib/My/SafeProcess/safe_kill_win.cc
@@ -29,6 +29,7 @@ int main(int argc, const char** argv )
   DWORD pid= -1;
   HANDLE shutdown_event;
   char safe_process_name[32]= {0};
+  int retry_open_event= 100;
 
   if (argc != 2) {
     fprintf(stderr, "safe_kill <pid>\n");
@@ -39,14 +40,33 @@ int main(int argc, const char** argv )
   _snprintf(safe_process_name, sizeof(safe_process_name), "safe_process[%d]", pid);
 
   /* Open the event to signal */
-  if ((shutdown_event=
-    OpenEvent(EVENT_MODIFY_STATE, FALSE, safe_process_name)) == NULL){
+  while ((shutdown_event=
+          OpenEvent(EVENT_MODIFY_STATE, FALSE, safe_process_name)) == NULL)
+  {
     fprintf(stderr, "Failed to open shutdown_event '%s', error: %d\n",
             safe_process_name, GetLastError());
-    exit(1);
+
+    /* Just check to see if pid exists */
+    HANDLE pid_handle= OpenProcess(SYNCHRONIZE, FALSE, pid);
+    if (pid_handle == NULL)
+      fprintf(stderr, "Could not open process with pid %d, error: %d\n", pid);
+	else
+	  CloseHandle(pid_handle);
+
+    if (retry_open_event--)
+    {
+      fprintf(stderr, "retrying...\n");
+      Sleep(100); /* In milli seconds */
+    }
+    else
+    {
+      fprintf(stderr, "No more retries, exiting");
+      exit(1);
+    }
   }
 
-  if(SetEvent(shutdown_event) == 0) {
+  if(SetEvent(shutdown_event) == 0)
+  {
     fprintf(stderr, "Failed to signal shutdown_event '%s', error: %d\n",
             safe_process_name, GetLastError());
     CloseHandle(shutdown_event);
-- 
2.30.9