merge process.[ch] with application.[ch]
This commit is contained in:
parent
2a68c7c8cd
commit
32e1f239b3
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue