mirror of https://github.com/oxen-io/lokinet
wait until actually stopped to tell windows we are
We should send STOP_PENDING rather than STOPPED while we aren't yet actually stopped; STOPPED is already sent when we actually finish stopping. Also fixes some silly argc/argv shenanigans, I think.
This commit is contained in:
parent
e8055a05ad
commit
fcc4f6050d
|
@ -379,7 +379,7 @@ main(int argc, char* argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
lokinet_main(int argc, char* argv[])
|
lokinet_main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
if (auto result = Lokinet_INIT())
|
if (auto result = Lokinet_INIT())
|
||||||
return result;
|
return result;
|
||||||
|
@ -647,7 +647,7 @@ SvcCtrlHandler(DWORD dwCtrl)
|
||||||
switch (dwCtrl)
|
switch (dwCtrl)
|
||||||
{
|
{
|
||||||
case SERVICE_CONTROL_STOP:
|
case SERVICE_CONTROL_STOP:
|
||||||
ReportSvcStatus(SERVICE_STOPPED, NO_ERROR, 0);
|
ReportSvcStatus(SERVICE_STOP_PENDING, NO_ERROR, 0);
|
||||||
// Signal the service to stop.
|
// Signal the service to stop.
|
||||||
handle_signal(SIGINT);
|
handle_signal(SIGINT);
|
||||||
return;
|
return;
|
||||||
|
@ -664,7 +664,7 @@ SvcCtrlHandler(DWORD dwCtrl)
|
||||||
// to the original lokinet entry
|
// to the original lokinet entry
|
||||||
// and only gets called if we get --win32-daemon in the command line
|
// and only gets called if we get --win32-daemon in the command line
|
||||||
VOID FAR PASCAL
|
VOID FAR PASCAL
|
||||||
win32_daemon_entry(DWORD argc, LPTSTR* argv)
|
win32_daemon_entry(DWORD, LPTSTR* argv)
|
||||||
{
|
{
|
||||||
// Register the handler function for the service
|
// Register the handler function for the service
|
||||||
SvcStatusHandle = RegisterServiceCtrlHandler("lokinet", SvcCtrlHandler);
|
SvcStatusHandle = RegisterServiceCtrlHandler("lokinet", SvcCtrlHandler);
|
||||||
|
@ -681,10 +681,14 @@ win32_daemon_entry(DWORD argc, LPTSTR* argv)
|
||||||
|
|
||||||
// Report initial status to the SCM
|
// Report initial status to the SCM
|
||||||
ReportSvcStatus(SERVICE_START_PENDING, NO_ERROR, 3000);
|
ReportSvcStatus(SERVICE_START_PENDING, NO_ERROR, 3000);
|
||||||
// SCM clobbers startup args, regenerate them here
|
// SCM calls this function with different args than a normal "main" expects,
|
||||||
argc = 2;
|
// but lokinet_main expects normal args, so set them here instead. At the
|
||||||
argv[1] = strdup("c:\\programdata\\lokinet\\lokinet.ini");
|
// moment we are not passing any args to lokinet_main this way anyway though.
|
||||||
argv[2] = nullptr;
|
|
||||||
lokinet_main(argc, argv);
|
std::array args = {
|
||||||
|
reinterpret_cast<char*>(argv[0]),
|
||||||
|
reinterpret_cast<char*>(strdup("c:\\programdata\\lokinet\\lokinet.ini")),
|
||||||
|
reinterpret_cast<char*>(0)};
|
||||||
|
lokinet_main(args.size() - 1, args.data());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue