luci-0.9: merge r5359

This commit is contained in:
Jo-Philipp Wich 2009-10-04 18:12:36 +00:00
parent bd72aa8399
commit 3432a89362
3 changed files with 33 additions and 21 deletions

View file

@ -8,7 +8,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=freifunk-watchdog
PKG_RELEASE:=6
PKG_RELEASE:=7
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
PKG_BUILD_DEPENDS := uci

View file

@ -21,10 +21,18 @@
/* Global watchdog fd, required by signal handler */
int wdfd = -1;
/* Handle finished childs */
static void sigchld_handler(int sig)
{
pid_t pid;
while( (pid = waitpid(-1, NULL, WNOHANG)) > 0 )
syslog(LOG_INFO, "Child returned (pid %d)", pid);
}
/* Watchdog shutdown helper */
static void shutdown_watchdog(int sig)
{
static int wdelay = 3600;
static const char wshutdown = WATCH_SHUTDOWN;
if( wdfd > -1 )
@ -298,7 +306,7 @@ static int do_daemon(void)
int loadavg_panic = 0;
openlog(SYSLOG_IDENT, 0, LOG_DAEMON);
//daemon(1, 1);
memset(&sa, 0, sizeof(sa));
if( (iwfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1 )
{
@ -327,6 +335,11 @@ static int do_daemon(void)
ioctl(wdfd, WDIOC_SETTIMEOUT, &wdtimeout);
}
/* Install signal handler to reap childs */
sa.sa_handler = sigchld_handler;
sa.sa_flags = 0;
sigaction(SIGCHLD, &sa, NULL);
while( 1 )
{
/* Check/increment action interval */

View file

@ -29,6 +29,7 @@
#include <math.h>
#include <time.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
@ -67,7 +68,7 @@
/* System load error action and treshold */
#define LOAD_TRESHOLD 15.00
#define LOAD_ACTION "/sbin/reboot"
#define LOAD_ACTION "/sbin/reboot", "/sbin/reboot"
/* Fallback binary name (passed by makefile) */
#ifndef BINARY
@ -107,22 +108,20 @@ iw_ioctl(int skfd, /* Socket to the kernel */
}
/* fork() & execl() helper */
#define EXEC(x) \
do { \
switch(fork()) \
{ \
case -1: \
syslog(LOG_CRIT, "Unable to fork child: %s", \
strerror(errno)); \
\
break; \
\
case 0: \
execl(x, NULL); \
syslog(LOG_CRIT, "Unable to execute action: %s", \
strerror(errno)); \
\
return 1; \
} \
#define EXEC(x) \
do { \
switch(fork()) \
{ \
case -1: \
syslog(LOG_CRIT, "Unable to fork child: %s", \
strerror(errno)); \
break; \
\
case 0: \
execl(x, NULL); \
syslog(LOG_CRIT, "Unable to execute action: %s", \
strerror(errno)); \
return 1; \
} \
} while(0)