diff options
author | Vladislav Vaintroub <wlad@mariadb.com> | 2022-04-08 18:54:26 +0200 |
---|---|---|
committer | Vladislav Vaintroub <wlad@mariadb.com> | 2022-04-11 07:49:43 +0200 |
commit | 5a4a37076db1f3a77a40c9636b96eef5625b3d81 (patch) | |
tree | 6577128eba58b58b7da79c1aae27614eea847e05 | |
parent | 284ff64cd6618ac9f90c182d46fa6f03b301b65b (diff) | |
download | mariadb-git-5a4a37076db1f3a77a40c9636b96eef5625b3d81.tar.gz |
MDEV-10183 implement service_manager_extend_timeout on Windows
The implementation calls SetServiceStatus() with updated
SERVICE_STATUS::dwHint and SERVICE_STATUS::dwCheckpoint
-rw-r--r-- | include/my_service_manager.h | 7 | ||||
-rw-r--r-- | sql/mysqld.cc | 6 | ||||
-rw-r--r-- | sql/mysqld.h | 1 | ||||
-rw-r--r-- | sql/winmain.cc | 3 |
4 files changed, 15 insertions, 2 deletions
diff --git a/include/my_service_manager.h b/include/my_service_manager.h index 3eff1253f20..498fc762048 100644 --- a/include/my_service_manager.h +++ b/include/my_service_manager.h @@ -43,7 +43,12 @@ #define SD_LISTEN_FDS_START (0) #define sd_notify(X, Y) #define sd_notifyf(E, F, ...) -#define service_manager_extend_timeout(I, FMTSTR, ...) +#ifdef _WIN32 + #define service_manager_extend_timeout(I, F, ...) \ + mysqld_win_extend_service_timeout(I) +#else + #define service_manager_extend_timeout(I, FMTSTR, ...) +#endif #endif #endif /* MY_SERVICE_MANAGER_INCLUDED */ diff --git a/sql/mysqld.cc b/sql/mysqld.cc index c3f745b4aae..a4220851fb6 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -2752,6 +2752,12 @@ void mysqld_win_set_startup_complete() } +void mysqld_win_extend_service_timeout(DWORD sec) +{ + my_report_svc_status((DWORD)-1, 0, 2*1000*sec); +} + + void mysqld_win_set_service_name(const char *name) { if (stricmp(name, "mysql")) diff --git a/sql/mysqld.h b/sql/mysqld.h index d0a33fabb51..7d41f61c4df 100644 --- a/sql/mysqld.h +++ b/sql/mysqld.h @@ -968,6 +968,7 @@ extern int mysqld_main(int argc, char **argv); extern HANDLE hEventShutdown; extern void mysqld_win_initiate_shutdown(); extern void mysqld_win_set_startup_complete(); +extern void mysqld_win_extend_service_timeout(DWORD sec); extern void mysqld_set_service_status_callback(void (*)(DWORD, DWORD, DWORD)); extern void mysqld_win_set_service_name(const char *name); #endif diff --git a/sql/winmain.cc b/sql/winmain.cc index f999767cb27..7def0aed531 100644 --- a/sql/winmain.cc +++ b/sql/winmain.cc @@ -81,7 +81,8 @@ static void report_svc_status(DWORD current_state, DWORD exit_code, DWORD wait_h return; static DWORD check_point= 1; - svc_status.dwCurrentState= current_state; + if (current_state != (DWORD)-1) + svc_status.dwCurrentState= current_state; svc_status.dwWaitHint= wait_hint; if (exit_code) |