Commit c6dfe79b authored by unknown's avatar unknown
Browse files

fixed the service bits of the IM


server-tools/instance-manager/IMService.cpp:
  * setting username and password to NULL so that the 
  IM runs at LocalSystem (this should be changed soon)
  * implemented stop service by raising a sigterm
  * implemented start service by loading options and calling manager()
server-tools/instance-manager/IMService.h:
  changed the sig for Run()
server-tools/instance-manager/WindowsService.cpp:
  default debugging to false
  changed the sig of RuN()
server-tools/instance-manager/WindowsService.h:
  change the sig of run()
server-tools/instance-manager/instance.cc:
  * remove the inclusion of process.h
  * concat all args into a single buffer to pass to CreateProcess
server-tools/instance-manager/instance_options.cc:
  quoting the binary to handle paths with quotes
server-tools/instance-manager/listener.cc:
  use a timeval for select so that our select will only run
  for 100 msec before we check to see if we are shutting down
server-tools/instance-manager/mysqlmanager.cc:
  if we are given the stand alone option, then run the manager as 
  standalone
server-tools/instance-manager/options.cc:
  Added stand alone command line arg
server-tools/instance-manager/options.h:
  Added stand alone command line arg
parent 69b1940e
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
#include <windows.h>
#include <signal.h>
#include "log.h"
#include "options.h"
#include "IMService.h"
#include "manager.h"

IMService::IMService(void)
{
  serviceName= "MySqlManager";
  displayName= "MySQL Manager";
  username= NULL;
  password= NULL;
}

IMService::~IMService(void)
@@ -16,18 +20,25 @@ IMService::~IMService(void)
void IMService::Stop()
{
  ReportStatus(SERVICE_STOP_PENDING);
  
  // stop the IM work
  raise(SIGTERM);
}

void IMService::Run()
void IMService::Run(DWORD argc, LPTSTR *argv)
{
  // report to the SCM that we're about to start
  ReportStatus((DWORD)SERVICE_START_PENDING);

  Options o;
  o.load(argc, argv);
  
  // init goes here
  ReportStatus((DWORD)SERVICE_RUNNING);

  // wait for main loop to terminate
  manager(o);
  o.cleanup();
}

void IMService::Log(const char *msg)
+1 −1
Original line number Diff line number Diff line
@@ -10,5 +10,5 @@ class IMService : public WindowsService
protected:
  void Log(const char *msg);
  void Stop();
  void Run();
  void Run(DWORD argc, LPTSTR *argv);
};
+3 −2
Original line number Diff line number Diff line
@@ -8,7 +8,8 @@ WindowsService::WindowsService(void) :
  statusCheckpoint(0),
  serviceName(NULL),
  inited(false),
  dwAcceptedControls(SERVICE_ACCEPT_STOP)
  dwAcceptedControls(SERVICE_ACCEPT_STOP),
  debugging(false)
{
  gService= this;
  status.dwServiceType= SERVICE_WIN32_OWN_PROCESS;
@@ -148,7 +149,7 @@ void WindowsService::RegisterAndRun(DWORD argc, LPTSTR *argv)
{
  statusHandle= ::RegisterServiceCtrlHandler(serviceName, ControlHandler);
  if (statusHandle && ReportStatus(SERVICE_START_PENDING))
    Run();
    Run(argc, argv);
  ReportStatus(SERVICE_STOPPED);
}

+1 −1
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ class WindowsService
  static void WINAPI    ControlHandler(DWORD CtrlType);

protected:
  virtual void Run()= 0;
  virtual void Run(DWORD argc, LPTSTR *argv)= 0;
  virtual void Stop()                 {}
  virtual void Shutdown()             {}
  virtual void Pause()                {}
+12 −16
Original line number Diff line number Diff line
@@ -18,9 +18,6 @@
#pragma implementation
#endif

#ifdef __WIN__
#include <process.h>
#endif
#include "instance.h"

#include "mysql_manager_error.h"
@@ -171,25 +168,24 @@ static int start_process(Instance_options *instance_options,
  ZeroMemory(pi, sizeof(PROCESS_INFORMATION));

  int cmdlen= 0;
  for (int i= 1; instance_options->argv[i] != 0; i++)
    cmdlen+= strlen(instance_options->argv[i]) + 1;
  cmdlen++;  /* we have to add a single space for CreateProcess (see docs) */
  for (int i= 0; instance_options->argv[i] != 0; i++)
    cmdlen+= strlen(instance_options->argv[i]) + 3;
  cmdlen++;   /* make room for the null */

  char *cmdline= NULL;
  if (cmdlen > 0)
  {
    cmdline= new char[cmdlen];
    cmdline[0]= 0;
    for (int i= 1; instance_options->argv[i] != 0; i++)
  char *cmdline= new char[cmdlen];
  if (cmdline == NULL)
    return 1;

  for (int i= 0; instance_options->argv[i] != 0; i++)
  {
      strcat(cmdline, " ");
    strcat(cmdline, "\"");
    strcat(cmdline, instance_options->argv[i]);
    }
    strcat(cmdline, "\" ");
  }

  /* Start the child process */
  BOOL result=
    CreateProcess(instance_options->mysqld_path,  /* File to execute */
    CreateProcess(NULL,          /* Put it all in cmdline */
                  cmdline,       /* Command line */
                  NULL,          /* Process handle not inheritable */
                  NULL,          /* Thread handle not inheritable */
Loading