merge process.[ch] with application.[ch]

This commit is contained in:
Harald Welte 2011-06-26 13:07:18 +02:00
parent 2a68c7c8cd
commit 32e1f239b3
6 changed files with 67 additions and 80 deletions

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;