diff options
-rw-r--r-- | sql/mysqld.cc | 78 | ||||
-rw-r--r-- | sql/nt_servc.cc | 4 |
2 files changed, 48 insertions, 34 deletions
diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 09c05a6463f..b3c67fd5126 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -469,15 +469,28 @@ static void close_connections(void) } } #ifdef __NT__ - if ( hPipe != INVALID_HANDLE_VALUE ) +if ( hPipe != INVALID_HANDLE_VALUE ) +{ + HANDLE temp; + DBUG_PRINT( "quit", ("Closing named pipes") ); + + /* Create connection to the handle named pipe handler to break the loop */ + if ((temp = CreateFile(szPipeName, + GENERIC_READ | GENERIC_WRITE, + 0, + NULL, + OPEN_EXISTING, + 0, + NULL )) != INVALID_HANDLE_VALUE) { - HANDLE hTempPipe = &hPipe; - DBUG_PRINT( "quit", ("Closing named pipes") ); - hPipe = INVALID_HANDLE_VALUE; - CancelIo( hTempPipe ); - DisconnectNamedPipe( hTempPipe ); - CloseHandle( hTempPipe ); + WaitNamedPipe(szPipeName, 1000); + DWORD dwMode = PIPE_READMODE_BYTE | PIPE_WAIT; + SetNamedPipeHandleState(temp, &dwMode, NULL, NULL); + CancelIo(temp); + DisconnectNamedPipe(temp); + CloseHandle(temp); } + } #endif #ifdef HAVE_SYS_UN_H if (unix_sock != INVALID_SOCKET) @@ -1857,6 +1870,14 @@ The server will not act as a slave."); if (opt_slow_log) open_log(&mysql_slow_log, glob_hostname, opt_slow_logname, "-slow.log", LOG_NORMAL); +#ifdef __WIN__ +#define MYSQL_ERR_FILE "mysql.err" + if (!opt_console) + { + freopen(MYSQL_ERR_FILE,"a+",stdout); + freopen(MYSQL_ERR_FILE,"a+",stderr); + } +#endif if (ha_init()) { sql_print_error("Can't init databases"); @@ -1882,13 +1903,8 @@ The server will not act as a slave."); ft_init_stopwords(ft_precompiled_stopwords); /* SerG */ #ifdef __WIN__ -#define MYSQL_ERR_FILE "mysql.err" if (!opt_console) - { - freopen(MYSQL_ERR_FILE,"a+",stdout); - freopen(MYSQL_ERR_FILE,"a+",stderr); - FreeConsole(); // Remove window - } + FreeConsole(); // Remove window #endif /* @@ -1986,7 +2002,7 @@ The server will not act as a slave."); #ifdef __NT__ if (hPipe == INVALID_HANDLE_VALUE && !have_tcpip) { - sql_print_error("TCP/IP must be installed on Win98 platforms"); + sql_print_error("TCP/IP or Named Pipes should be installed on NT OS"); } else { @@ -2044,34 +2060,32 @@ The server will not act as a slave."); #ifdef EXTRA_DEBUG sql_print_error("After lock_thread_count"); #endif -#else - if (Service.IsNT()) +#endif + + /* Wait until cleanup is done */ + (void) pthread_mutex_lock(&LOCK_thread_count); + while (!ready_to_exit) { + pthread_cond_wait(&COND_thread_count,&LOCK_thread_count); + } + (void) pthread_mutex_unlock(&LOCK_thread_count); +#ifdef __WIN__ + if (Service.IsNT()) + { if(start_mode) - { - if (WaitForSingleObject(hEventShutdown,1000)==WAIT_TIMEOUT) - Service.Stop(); - } + Service.Stop(); else { Service.SetShutdownEvent(0); if(hEventShutdown) CloseHandle(hEventShutdown); } - } - else - { + } + else + { Service.SetShutdownEvent(0); if(hEventShutdown) CloseHandle(hEventShutdown); - } + } #endif - - /* Wait until cleanup is done */ - (void) pthread_mutex_lock(&LOCK_thread_count); - while (!ready_to_exit) - { - pthread_cond_wait(&COND_thread_count,&LOCK_thread_count); - } - (void) pthread_mutex_unlock(&LOCK_thread_count); my_end(opt_endinfo ? MY_CHECK_ERROR | MY_GIVE_INFO : 0); exit(0); return(0); /* purecov: deadcode */ diff --git a/sql/nt_servc.cc b/sql/nt_servc.cc index 6930800982e..8c705a94f55 100644 --- a/sql/nt_servc.cc +++ b/sql/nt_servc.cc @@ -28,7 +28,7 @@ NTService::NTService() //time-out variables nStartTimeOut = 15000; - nStopTimeOut = 15000; + nStopTimeOut = 86400000; nPauseTimeOut = 5000; nResumeTimeOut = 5000; @@ -253,7 +253,7 @@ void NTService::ServiceMain(DWORD argc, LPTSTR *argv) WaitForSingleObject (pService->hExitEvent, INFINITE); // wait for thread to exit - if (WaitForSingleObject (pService->hThreadHandle, 1000) == WAIT_TIMEOUT) + if (WaitForSingleObject (pService->hThreadHandle, INFINITE) == WAIT_TIMEOUT) CloseHandle(pService->hThreadHandle); pService->Exit(0); |