summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>1997-10-23 21:32:48 +0000
committerache <ache@FreeBSD.org>1997-10-23 21:32:48 +0000
commit2ac9673aae5d6c0ccae308475fa143d4c1fa6586 (patch)
tree7c8180cc479ae29ad50f629d5bd4009c1cf283b2 /usr.sbin
parent39156922f68cd1254c86a62bbfbed6bc9d87da70 (diff)
downloadFreeBSD-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.h10
-rw-r--r--usr.sbin/ppp/timer.c64
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)
{
OpenPOWER on IntegriCloud