diff -Naur monit-5.6-orig/src/monit.c monit-5.6-new/src/monit.c --- monit-5.6-orig/src/monit.c 2013-08-20 00:37:08.000000000 -0700 +++ monit-5.6-new/src/monit.c 2013-09-04 15:48:14.412894000 -0700 @@ -97,7 +97,7 @@ static void do_init(); /* Initialize this application */ -static void do_reinit(); /* Re-initialize the runtime application */ +void do_reinit(); /* Re-initialize the runtime application */ static void do_action(char **); /* Dispatch to the submitted action */ static void do_exit(); /* Finalize monit */ static void do_default(); /* Do default action */ @@ -328,7 +328,7 @@ * Re-Initialize the application - called if a * monit daemon receives the SIGHUP signal. */ -static void do_reinit() { +void do_reinit() { int status; LogInfo("Awakened by the SIGHUP signal\n"); diff -Naur monit-5.6-orig/src/util.c monit-5.6-new/src/util.c --- monit-5.6-orig/src/util.c 2013-03-02 15:53:10.000000000 -0800 +++ monit-5.6-new/src/util.c 2013-09-04 19:23:14.859592000 -0700 @@ -1,4 +1,4 @@ -/* + /* * Copyright (C) Tildeslash Ltd. All rights reserved. * * This program is free software: you can redistribute it and/or modify @@ -119,6 +119,10 @@ #include #endif +#ifdef HAVE_SYS_SYSINFO_H +#include +#endif + #include "monit.h" #include "engine.h" #include "md5.h" @@ -129,6 +133,7 @@ #include "process.h" #include "event.h" +extern void do_reinit(); struct ad_user { const char *login; @@ -1462,8 +1467,23 @@ ASSERT(pidfile); if ((ctime= file_getTimestamp(pidfile, S_IFREG)) ) { + time_t now= time(&now); time_t since= now-ctime; +#ifdef HAVE_SYS_SYSINFO_H + struct sysinfo info; + + sysinfo(&info); + + if (since > info.uptime) { + LogWarning("Reloading monit due to time change.\n"); + do_reinit(); +#endif + now= time(&now); + since= now-ctime; +#ifdef HAVE_SYS_SYSINFO_H + } +#endif return since; } return (time_t)-1; diff -Naur monit-5.6-orig/src/validate.c monit-5.6-new/src/validate.c --- monit-5.6-orig/src/validate.c 2013-08-27 14:35:08.000000000 -0700 +++ monit-5.6-new/src/validate.c 2013-09-04 18:29:32.068951000 -0700 @@ -153,6 +153,9 @@ do_scheduled_action(s); } + /* Check to see if time skipped forward */ + Util_getProcessUptime(Run.pidfile); + /* Check the services */ time_t now = Time_now(); for (s = servicelist; s && !Run.stopped; s = s->next) {