X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/184fbf8c196e5c9159b280833c513c6ef582ae3f..31a40f97ef54e10e2b3dc3cacb9cff436657c586:/package/ppp/patches/206-compensate_time_change.patch?ds=inline diff --git a/package/ppp/patches/206-compensate_time_change.patch b/package/ppp/patches/206-compensate_time_change.patch index 1566b80c9..f842ff2ee 100644 --- a/package/ppp/patches/206-compensate_time_change.patch +++ b/package/ppp/patches/206-compensate_time_change.patch @@ -1,6 +1,5 @@ -diff -Naur ppp-2.4.4.orig/pppd/main.c ppp-2.4.4/pppd/main.c ---- ppp-2.4.4.orig/pppd/main.c 2009-05-07 22:25:24.000000000 -0400 -+++ ppp-2.4.4/pppd/main.c 2009-05-07 22:22:40.000000000 -0400 +--- a/pppd/main.c ++++ b/pppd/main.c @@ -90,6 +90,7 @@ #include #include @@ -9,7 +8,7 @@ diff -Naur ppp-2.4.4.orig/pppd/main.c ppp-2.4.4/pppd/main.c #include "pppd.h" #include "magic.h" -@@ -227,6 +228,7 @@ +@@ -227,6 +228,7 @@ static struct subprocess *children; /* Prototypes for procedures local to this file. */ @@ -17,7 +16,7 @@ diff -Naur ppp-2.4.4.orig/pppd/main.c ppp-2.4.4/pppd/main.c static void setup_signals __P((void)); static void create_pidfile __P((int pid)); static void create_linkpidfile __P((int pid)); -@@ -532,6 +534,7 @@ +@@ -532,6 +534,7 @@ main(argc, argv) info("Starting link"); } @@ -25,7 +24,7 @@ diff -Naur ppp-2.4.4.orig/pppd/main.c ppp-2.4.4/pppd/main.c gettimeofday(&start_time, NULL); script_unsetenv("CONNECT_TIME"); script_unsetenv("BYTES_SENT"); -@@ -1264,6 +1267,36 @@ +@@ -1264,6 +1267,36 @@ struct callout { static struct callout *callout = NULL; /* Callout list */ static struct timeval timenow; /* Current time */ @@ -62,7 +61,7 @@ diff -Naur ppp-2.4.4.orig/pppd/main.c ppp-2.4.4/pppd/main.c /* * timeout - Schedule a timeout. -@@ -1334,6 +1367,8 @@ +@@ -1334,6 +1367,8 @@ calltimeout() { struct callout *p; @@ -71,89 +70,7 @@ diff -Naur ppp-2.4.4.orig/pppd/main.c ppp-2.4.4/pppd/main.c while (callout != NULL) { p = callout; -@@ -1361,6 +1396,8 @@ - { - if (callout == NULL) - return NULL; -+ -+ check_time(); - - gettimeofday(&timenow, NULL); - tvp->tv_sec = callout->c_time.tv_sec - timenow.tv_sec; -diff -Naur ppp-2.4.4.orig/pppd/main.c ppp-2.4.4/pppd/main.c ---- ppp-2.4.4.orig/pppd/main.c 2009-05-07 22:25:24.000000000 -0400 -+++ ppp-2.4.4/pppd/main.c 2009-05-07 22:22:40.000000000 -0400 -@@ -90,6 +90,7 @@ - #include - #include - #include -+#include - - #include "pppd.h" - #include "magic.h" -@@ -227,6 +228,7 @@ - - /* Prototypes for procedures local to this file. */ - -+static void check_time(void); - static void setup_signals __P((void)); - static void create_pidfile __P((int pid)); - static void create_linkpidfile __P((int pid)); -@@ -532,6 +534,7 @@ - info("Starting link"); - } - -+ check_time(); - gettimeofday(&start_time, NULL); - script_unsetenv("CONNECT_TIME"); - script_unsetenv("BYTES_SENT"); -@@ -1264,6 +1267,36 @@ - - static struct callout *callout = NULL; /* Callout list */ - static struct timeval timenow; /* Current time */ -+static long uptime_diff = 0; -+static int uptime_diff_set = 0; -+ -+static void check_time(void) -+{ -+ long new_diff; -+ struct timeval t; -+ struct sysinfo i; -+ struct callout *p; -+ -+ gettimeofday(&t, NULL); -+ sysinfo(&i); -+ new_diff = t.tv_sec - i.uptime; -+ -+ if (!uptime_diff_set) { -+ uptime_diff = new_diff; -+ uptime_diff_set = 1; -+ return; -+ } -+ -+ if ((new_diff - 5 > uptime_diff) || (new_diff + 5 < uptime_diff)) { -+ /* system time has changed, update counters and timeouts */ -+ info("System time change detected."); -+ start_time.tv_sec += new_diff - uptime_diff; -+ -+ for (p = callout; p != NULL; p = p->c_next) -+ p->c_time.tv_sec += new_diff - uptime_diff; -+ } -+ uptime_diff = new_diff; -+} - - /* - * timeout - Schedule a timeout. -@@ -1334,6 +1367,8 @@ - { - struct callout *p; - -+ check_time(); -+ - while (callout != NULL) { - p = callout; - -@@ -1361,6 +1396,8 @@ +@@ -1361,6 +1396,8 @@ timeleft(tvp) { if (callout == NULL) return NULL;