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