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 include $(TOPDIR)/rules.mk
PKG_NAME:=freifunk-watchdog PKG_NAME:=freifunk-watchdog
PKG_RELEASE:=6 PKG_RELEASE:=7
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
PKG_BUILD_DEPENDS := uci PKG_BUILD_DEPENDS := uci

View file

@ -21,10 +21,18 @@
/* Global watchdog fd, required by signal handler */ /* Global watchdog fd, required by signal handler */
int wdfd = -1; 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 */ /* Watchdog shutdown helper */
static void shutdown_watchdog(int sig) static void shutdown_watchdog(int sig)
{ {
static int wdelay = 3600;
static const char wshutdown = WATCH_SHUTDOWN; static const char wshutdown = WATCH_SHUTDOWN;
if( wdfd > -1 ) if( wdfd > -1 )
@ -298,7 +306,7 @@ static int do_daemon(void)
int loadavg_panic = 0; int loadavg_panic = 0;
openlog(SYSLOG_IDENT, 0, LOG_DAEMON); openlog(SYSLOG_IDENT, 0, LOG_DAEMON);
//daemon(1, 1); memset(&sa, 0, sizeof(sa));
if( (iwfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1 ) if( (iwfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1 )
{ {
@ -327,6 +335,11 @@ static int do_daemon(void)
ioctl(wdfd, WDIOC_SETTIMEOUT, &wdtimeout); 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 ) while( 1 )
{ {
/* Check/increment action interval */ /* Check/increment action interval */

View file

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