From e874f84fdb6eb83d905a72b35d87398374594b97 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Fri, 5 Jun 2009 19:58:50 +0200 Subject: more regressions found at runtime on alic1c --- package/ppp/patches/patch-pppd_main_c | 81 +++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 package/ppp/patches/patch-pppd_main_c (limited to 'package/ppp/patches/patch-pppd_main_c') diff --git a/package/ppp/patches/patch-pppd_main_c b/package/ppp/patches/patch-pppd_main_c new file mode 100644 index 000000000..22e6a64f8 --- /dev/null +++ b/package/ppp/patches/patch-pppd_main_c @@ -0,0 +1,81 @@ +--- ppp-2.4.4.orig/pppd/main.c 2006-06-04 05:52:50.000000000 +0200 ++++ ppp-2.4.4/pppd/main.c 2009-06-05 19:12:00.000000000 +0200 +@@ -90,6 +90,7 @@ + #include + #include + #include ++#include + + #include "pppd.h" + #include "magic.h" +@@ -227,6 +228,7 @@ static struct subprocess *children; + + /* 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)); +@@ -529,6 +531,7 @@ main(argc, argv) + info("Starting link"); + } + ++ check_time(); + gettimeofday(&start_time, NULL); + script_unsetenv("CONNECT_TIME"); + script_unsetenv("BYTES_SENT"); +@@ -1262,6 +1265,36 @@ struct callout { + + 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. +@@ -1332,6 +1365,8 @@ calltimeout() + { + struct callout *p; + ++ check_time(); ++ + while (callout != NULL) { + p = callout; + +@@ -1359,6 +1394,8 @@ timeleft(tvp) + { + if (callout == NULL) + return NULL; ++ ++ check_time(); + + gettimeofday(&timenow, NULL); + tvp->tv_sec = callout->c_time.tv_sec - timenow.tv_sec; -- cgit v1.2.3