added no fork mode to the executable so it can be used w/ sipx watchdog service. This mode is not available on windows as we do not fork on windows regardless. Thanks to Paweł Pierścionek for the contribution.

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@3999 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Michael Jerris 2007-01-19 12:59:49 +00:00
parent 680ef8d169
commit ca5d5ce595
1 changed files with 16 additions and 7 deletions

View File

@ -25,6 +25,7 @@
*
* Anthony Minessale II <anthmct@yahoo.com>
* Michael Jerris <mike@jerris.com>
* Pawel Pierscionek <pawel@voiceworks.pl>
*
*
* switch.c -- Main
@ -194,7 +195,10 @@ int main(int argc, char *argv[])
{
char pid_path[256] = ""; // full path to the pid file
const char *err = NULL; // error value for return from freeswitch initialization
int bg = 0; // TRUE if we are running in background mode
#ifndef WIN32
int nf = 0; // TRUE if we are running in nofork mode
#endif
int nc = 0; // TRUE if we are running in noconsole mode
int vg = 0; // TRUE if we are running in vg mode
FILE *f; // file handle to the pid file
pid_t pid = 0; //
@ -254,6 +258,11 @@ int main(int argc, char *argv[])
exit(0);
}
}
#else
if (argv[x] && !strcmp(argv[x], "-nf")) {
nf++;
}
#endif
if (argv[x] && !strcmp(argv[x], "-hp")) {
set_high_priority();
@ -264,8 +273,8 @@ int main(int argc, char *argv[])
}
if (argv[x] && !strcmp(argv[x], "-nc")) {
bg++;
}
nc++;
}
if (argv[x] && !strcmp(argv[x], "-vg")) {
vg++;
@ -276,7 +285,7 @@ int main(int argc, char *argv[])
return freeswitch_kill_background();
}
if (bg) {
if (nc) {
signal(SIGHUP, handle_SIGHUP);
signal(SIGTERM, handle_SIGHUP);
@ -284,14 +293,14 @@ int main(int argc, char *argv[])
#ifdef WIN32
FreeConsole();
#else
if ((pid = fork())) {
if (!nf && (pid = fork())) {
fprintf(stderr, "%d Backgrounding.\n", (int)pid);
exit(0);
}
#endif
}
if (switch_core_init_and_modload(bg ? lfile : NULL, &err) != SWITCH_STATUS_SUCCESS) {
if (switch_core_init_and_modload(nc ? lfile : NULL, &err) != SWITCH_STATUS_SUCCESS) {
fprintf(stderr, "Cannot Initilize [%s]\n", err);
return 255;
}
@ -305,7 +314,7 @@ int main(int argc, char *argv[])
fprintf(f, "%d", pid = getpid());
fclose(f);
switch_core_runtime_loop(bg);
switch_core_runtime_loop(nc);
return switch_core_destroy(vg);
}