Restore back non-interruptable sleep/usleep just redefine them to not

mix with standard library functions
This commit is contained in:
Andrey A. Chernov 1997-10-23 21:32:48 +00:00
parent cc2847b862
commit 1f1d79b8fe
2 changed files with 72 additions and 2 deletions

View File

@ -15,7 +15,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * 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: * TODO:
*/ */
@ -26,6 +26,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <machine/endian.h> #include <machine/endian.h>
#include <unistd.h> #include <unistd.h>
#include <signal.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -104,4 +105,11 @@ char *dstsystem;
#define FALSE (0) #define FALSE (0)
#endif #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_ */ #endif /* _DEFS_H_ */

View File

@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * 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: * TODO:
*/ */
@ -197,6 +197,68 @@ ShowTimers()
} }
#ifdef SIGALRM #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 void
InitTimerService(void) InitTimerService(void)
{ {