diff options
author | Harald Welte <laforge@gnumonks.org> | 2011-06-26 13:07:18 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2011-06-26 14:14:05 +0200 |
commit | 32e1f239b3b8f04c8f26c80ea87c978040c122bf (patch) | |
tree | c3fbdf930782559737d621a9f07c999045b6bfd7 | |
parent | 2a68c7c8cd2eca65c58c0898d0e1716e9d4c3ecd (diff) |
merge process.[ch] with application.[ch]
-rw-r--r-- | include/osmocom/core/application.h | 2 | ||||
-rw-r--r-- | include/osmocom/core/process.h | 8 | ||||
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/application.c | 53 | ||||
-rw-r--r-- | src/process.c | 73 | ||||
-rw-r--r-- | src/select.c | 9 |
6 files changed, 67 insertions, 80 deletions
diff --git a/include/osmocom/core/application.h b/include/osmocom/core/application.h index c1642ec4..5d098961 100644 --- a/include/osmocom/core/application.h +++ b/include/osmocom/core/application.h @@ -13,4 +13,6 @@ extern struct log_target *osmo_stderr_target; void osmo_init_ignore_signals(void); int osmo_init_logging(const struct log_info *); +int osmo_daemonize(void); + #endif diff --git a/include/osmocom/core/process.h b/include/osmocom/core/process.h index 2d663828..1dde0219 100644 --- a/include/osmocom/core/process.h +++ b/include/osmocom/core/process.h @@ -1,6 +1,2 @@ -#ifndef _OSMO_PROCESS_H -#define _OSMO_PROCESS_H - -int osmo_daemonize(void); - -#endif +#warning "Update from osmocom/core/process.h to osmocom/core/application.h" +#include <osmocom/core/application.h> diff --git a/src/Makefile.am b/src/Makefile.am index 1ae3cff8..bbe6286d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -14,7 +14,7 @@ libosmocore_la_SOURCES = timer.c select.c signal.c msgb.c bits.c \ write_queue.c utils.c socket.c \ logging.c logging_syslog.c rate_ctr.c \ gsmtap_util.c crc16.c panic.c backtrace.c \ - process.c conv.c application.c + conv.c application.c if ENABLE_PLUGIN libosmocore_la_SOURCES += plugin.c diff --git a/src/application.c b/src/application.c index 96b4204e..5f8f4471 100644 --- a/src/application.c +++ b/src/application.c @@ -1,5 +1,6 @@ /* Utility functions to setup applications */ /* + * (C) 2010 by Harald Welte <laforge@gnumonks.org> * (C) 2011 by Holger Hans Peter Freyther * * All Rights Reserved @@ -24,6 +25,11 @@ #include <osmocom/core/logging.h> #include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <errno.h> +#include <sys/stat.h> struct log_target *osmo_stderr_target; @@ -47,3 +53,50 @@ int osmo_init_logging(const struct log_info *log_info) log_set_all_filter(osmo_stderr_target, 1); return 0; } + +int osmo_daemonize(void) +{ + int rc; + pid_t pid, sid; + + /* Check if parent PID == init, in which case we are already a daemon */ + if (getppid() == 1) + return -EEXIST; + + /* Fork from the parent process */ + pid = fork(); + if (pid < 0) { + /* some error happened */ + return pid; + } + + if (pid > 0) { + /* if we have received a positive PID, then we are the parent + * and can exit */ + exit(0); + } + + /* FIXME: do we really want this? */ + umask(0); + + /* Create a new session and set process group ID */ + sid = setsid(); + if (sid < 0) + return sid; + + /* Change to the /tmp directory, which prevents the CWD from being locked + * and unable to remove it */ + rc = chdir("/tmp"); + if (rc < 0) + return rc; + + /* Redirect stdio to /dev/null */ +/* since C89/C99 says stderr is a macro, we can safely do this! */ +#ifdef stderr + freopen("/dev/null", "r", stdin); + freopen("/dev/null", "w", stdout); + freopen("/dev/null", "w", stderr); +#endif + + return 0; +} diff --git a/src/process.c b/src/process.c deleted file mode 100644 index 7f4f12cb..00000000 --- a/src/process.c +++ /dev/null @@ -1,73 +0,0 @@ -/* Process handling support code */ - -/* (C) 2010 by Harald Welte <laforge@gnumonks.org> - * All Rights Reserved - * - * 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 - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - */ - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <errno.h> -#include <sys/stat.h> - -int osmo_daemonize(void) -{ - int rc; - pid_t pid, sid; - - /* Check if parent PID == init, in which case we are already a daemon */ - if (getppid() == 1) - return -EEXIST; - - /* Fork from the parent process */ - pid = fork(); - if (pid < 0) { - /* some error happened */ - return pid; - } - - if (pid > 0) { - /* if we have received a positive PID, then we are the parent - * and can exit */ - exit(0); - } - - /* FIXME: do we really want this? */ - umask(0); - - /* Create a new session and set process group ID */ - sid = setsid(); - if (sid < 0) - return sid; - - /* Change to the /tmp directory, which prevents the CWD from being locked - * and unable to remove it */ - rc = chdir("/tmp"); - if (rc < 0) - return rc; - - /* Redirect stdio to /dev/null */ -/* since C89/C99 says stderr is a macro, we can safely do this! */ -#ifdef stderr - freopen("/dev/null", "r", stdin); - freopen("/dev/null", "w", stdout); - freopen("/dev/null", "w", stderr); -#endif - - return 0; -} diff --git a/src/select.c b/src/select.c index 4ea95362..4b002ae5 100644 --- a/src/select.c +++ b/src/select.c @@ -47,6 +47,15 @@ int osmo_fd_register(struct osmo_fd *fd) if (flags < 0) return flags; + /* set close-on-exec flag */ + flags = fcntl(fd->fd, F_GETFD); + if (flags < 0) + return flags; + flags |= FD_CLOEXEC; + flags = fcntl(fd->fd, F_SETFD, flags); + if (flags < 0) + return flags; + /* Register FD */ if (fd->fd > maxfd) maxfd = fd->fd; |