• Vladislav Vaintroub's avatar
    Bug #20430 mysqld.exe windows service stuck in "SERVICE_STOP_PENDING" · f2a610e1
    Vladislav Vaintroub authored
    status
    
    The problem appears to be a race condition, when service is being
    stopped right after startup. We set the service status to SERVICE_RUNNING
    way too early it cannot yet handle stop requests -  initialization has
    not finished and  hEventShutdown  that signals server to stop is not yet
    created. If somebody issues "net stop MySQL" at this time, MySQL is not
    informed about the stop and continues to run as usual, while
    NTService::ServiceMain() stucks forever waiting for mysql's "main" thread
    to finish.
    
    Solution is to remain in SERVICE_START_PENDING status until after server
    initialization  is fully complete and only then change the status to
    SERVICE_RUNNING. In  SERVICE_START_PENDING we do not accept service control
    requests, i.e it is not possible to stop service in that time.
    
    sql/mysqld.cc:
      Set service status to running after all initialization is complete
    sql/nt_servc.cc:
      New method SetRunning() to be called  by application
      to set service status to SERVICE_RUNNING when apllication
      has finished initialization.
    sql/nt_servc.h:
      New method SetRunning() to be called  by application
      when initialization completes
    f2a610e1
nt_servc.cc 15.7 KB