summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/mysqld.cc78
-rw-r--r--sql/nt_servc.cc4
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);