/*
process.c -- process management functions
Copyright (C) 1999-2005 Ivo Timmermans,
- 2000-2011 Guus Sliepen <guus@tinc-vpn.org>
+ 2000-2013 Guus Sliepen <guus@tinc-vpn.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
static sigset_t emptysigset;
#endif
-static int saved_debug_level = -1;
-
static void memory_full(int size) {
logger(LOG_ERR, "Memory exhausted (couldn't allocate %d bytes), exitting.", size);
exit(1);
logger(LOG_NOTICE, "Got %s request", "SERVICE_CONTROL_SHUTDOWN");
break;
default:
- logger(LOG_WARNING, "Got unexpected request %d", request);
+ logger(LOG_WARNING, "Got unexpected request %d", (int)request);
return ERROR_CALL_NOT_IMPLEMENTED;
}
}
VOID WINAPI run_service(DWORD argc, LPTSTR* argv) {
- int err = 1;
extern int main2(int argc, char **argv);
-
status.dwServiceType = SERVICE_WIN32;
status.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
status.dwWin32ExitCode = 0;
if (!statushandle) {
logger(LOG_ERR, "System call `%s' failed: %s", "RegisterServiceCtrlHandlerEx", winerror(GetLastError()));
- err = 1;
} else {
status.dwWaitHint = 30000;
status.dwCurrentState = SERVICE_START_PENDING;
status.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus(statushandle, &status);
- err = main2(argc, argv);
+ main2(argc, argv);
status.dwWaitHint = 0;
status.dwCurrentState = SERVICE_STOPPED;
- //status.dwWin32ExitCode = err;
SetServiceStatus(statushandle, &status);
}
/* if it's locked, write-protected, or whatever */
if(!write_pid(pidfilename)) {
- fprintf(stderr, "Could write pid file %s: %s\n", pidfilename, strerror(errno));
+ fprintf(stderr, "Couldn't write pid file %s: %s\n", pidfilename, strerror(errno));
return false;
}
}
}
-#ifdef WEXITSTATUS
if(status != -1) {
+#ifdef WEXITSTATUS
if(WIFEXITED(status)) { /* Child exited by itself */
if(WEXITSTATUS(status)) {
logger(LOG_ERR, "Script %s exited with non-zero status %d",
logger(LOG_ERR, "Script %s terminated abnormally", name);
return false;
}
+#endif
} else {
logger(LOG_ERR, "System call `%s' failed: %s", "system", strerror(errno));
return false;
}
-#endif
#endif
return true;
}
}
static RETSIGTYPE sigint_handler(int a) {
+ static int saved_debug_level = -1;
+
logger(LOG_NOTICE, "Got %s signal", "INT");
if(saved_debug_level != -1) {