r4581: From Derrell.Lipman@UnwiredUniverse.com. Use nanosleep instead of select
authorJeremy Allison <jra@samba.org>
Thu, 6 Jan 2005 23:45:53 +0000 (23:45 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:53:48 +0000 (10:53 -0500)
when we have it in smb_msleep.
Jeremy.
(This used to be commit 465c207ffbcd5ee859faee282ef220a6c72e4eeb)

source3/configure.in
source3/lib/util.c

index 35300151104571cc5b0ffdfb770909f03c078b35..9c3ee513af5148851673208d69dff4dd034c7d67 100644 (file)
@@ -1005,6 +1005,7 @@ AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf)
 AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink)
 AC_CHECK_FUNCS(syslog vsyslog timegm)
 AC_CHECK_FUNCS(setlocale nl_langinfo)
+AC_CHECK_FUNCS(nanosleep)
 # setbuffer, shmget, shm_open are needed for smbtorture
 AC_CHECK_FUNCS(setbuffer shmget shm_open backtrace_symbols)
 AC_CHECK_HEADERS(libexc.h)
index 4d66ed965585ae1ff75b65ab2606f4ee11d67a31..455f87aaab8f25dde66ea0ed6a35f6752a14adb1 100644 (file)
@@ -779,12 +779,24 @@ SMB_OFF_T transfer_file(int infd,int outfd,SMB_OFF_T n)
 
 void smb_msleep(unsigned int t)
 {
+#if defined(HAVE_NANOSLEEP)
+       struct timespec tval;
+       int ret;
+
+       tval.tv_sec = t/1000;
+       tval.tv_nsec = 1000000*(t%1000);
+
+       do {
+               errno = 0;
+               ret = nanosleep(&tval, &tval);
+       } while (ret < 0 && errno == EINTR && (tval.tv_sec > 0 || tval.tv_nsec > 0));
+#else
        unsigned int tdiff=0;
        struct timeval tval,t1,t2;  
        fd_set fds;
 
        GetTimeOfDay(&t1);
-       GetTimeOfDay(&t2);
+       t2 = t1;
   
        while (tdiff < t) {
                tval.tv_sec = (t-tdiff)/1000;
@@ -808,6 +820,7 @@ void smb_msleep(unsigned int t)
 
                tdiff = TvalDiff(&t1,&t2);
        }
+#endif
 }
 
 /****************************************************************************