aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmocom/core/application.h2
-rw-r--r--include/osmocom/core/process.h8
-rw-r--r--src/Makefile.am2
-rw-r--r--src/application.c53
-rw-r--r--src/process.c73
-rw-r--r--src/select.c9
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;