diff options
author | ache <ache@FreeBSD.org> | 1997-10-23 21:32:48 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 1997-10-23 21:32:48 +0000 |
commit | 2ac9673aae5d6c0ccae308475fa143d4c1fa6586 (patch) | |
tree | 7c8180cc479ae29ad50f629d5bd4009c1cf283b2 /usr.sbin | |
parent | 39156922f68cd1254c86a62bbfbed6bc9d87da70 (diff) | |
download | FreeBSD-src-2ac9673aae5d6c0ccae308475fa143d4c1fa6586.zip FreeBSD-src-2ac9673aae5d6c0ccae308475fa143d4c1fa6586.tar.gz |
Restore back non-interruptable sleep/usleep just redefine them to not
mix with standard library functions
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/ppp/defs.h | 10 | ||||
-rw-r--r-- | usr.sbin/ppp/timer.c | 64 |
2 files changed, 72 insertions, 2 deletions
diff --git a/usr.sbin/ppp/defs.h b/usr.sbin/ppp/defs.h index 1ae8b83..6e2835a 100644 --- a/usr.sbin/ppp/defs.h +++ b/usr.sbin/ppp/defs.h @@ -15,7 +15,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: defs.h,v 1.18 1997/08/25 00:29:10 brian Exp $ + * $Id: defs.h,v 1.19 1997/09/10 02:20:28 brian Exp $ * * TODO: */ @@ -26,6 +26,7 @@ #include <sys/types.h> #include <machine/endian.h> #include <unistd.h> +#include <signal.h> #include <stdlib.h> #include <stdio.h> #include <string.h> @@ -104,4 +105,11 @@ char *dstsystem; #define FALSE (0) #endif +#ifdef SIGALRM +#define sleep nointr_sleep +#define usleep nointr_usleep +u_int sleep(u_int sec); +void usleep(u_int usec); +#endif + #endif /* _DEFS_H_ */ diff --git a/usr.sbin/ppp/timer.c b/usr.sbin/ppp/timer.c index 8454f69..3070346 100644 --- a/usr.sbin/ppp/timer.c +++ b/usr.sbin/ppp/timer.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: timer.c,v 1.18 1997/08/25 00:29:30 brian Exp $ + * $Id: timer.c,v 1.19 1997/10/23 20:11:01 ache Exp $ * * TODO: */ @@ -197,6 +197,68 @@ ShowTimers() } #ifdef SIGALRM +u_int +sleep(u_int sec) +{ + struct timeval to, st, et; + long sld, nwd, std; + + gettimeofday(&st, NULL); + to.tv_sec = sec; + to.tv_usec = 0; + std = st.tv_sec * 1000000 + st.tv_usec; + for (;;) { + if (select(0, NULL, NULL, NULL, &to) == 0 || + errno != EINTR) { + break; + } else { + gettimeofday(&et, NULL); + sld = to.tv_sec * 1000000 + to.tv_sec; + nwd = et.tv_sec * 1000000 + et.tv_usec - std; + if (sld > nwd) + sld -= nwd; + else + sld = 1; /* Avoid both tv_sec/usec is 0 */ + + /* Calculate timeout value for select */ + to.tv_sec = sld / 1000000; + to.tv_usec = sld % 1000000; + } + } + return (0L); +} + +void +usleep(u_int usec) +{ + struct timeval to, st, et; + long sld, nwd, std; + + gettimeofday(&st, NULL); + to.tv_sec = 0; + to.tv_usec = usec; + std = st.tv_sec * 1000000 + st.tv_usec; + for (;;) { + if (select(0, NULL, NULL, NULL, &to) == 0 || + errno != EINTR) { + break; + } else { + gettimeofday(&et, NULL); + sld = to.tv_sec * 1000000 + to.tv_sec; + nwd = et.tv_sec * 1000000 + et.tv_usec - std; + if (sld > nwd) + sld -= nwd; + else + sld = 1; /* Avoid both tv_sec/usec is 0 */ + + /* Calculate timeout value for select */ + to.tv_sec = sld / 1000000; + to.tv_usec = sld % 1000000; + + } + } +} + void InitTimerService(void) { |