Author: rfm
Date: Sat Feb  7 12:01:53 2015
New Revision: 38336

URL: http://svn.gna.org/viewcvs/gnustep?rev=38336&view=rev
Log:
another mingw infconfig simplification to hopefully work with new mingw

Modified:
    libs/base/trunk/ChangeLog
    libs/base/trunk/Source/NSThread.m

Modified: libs/base/trunk/ChangeLog
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/ChangeLog?rev=38336&r1=38335&r2=38336&view=diff
==============================================================================
--- libs/base/trunk/ChangeLog   (original)
+++ libs/base/trunk/ChangeLog   Sat Feb  7 12:01:53 2015
@@ -1,6 +1,7 @@
 2015-02-07  Richard Frith-Macdonald <[email protected]>
 
        * Source/NSData.m: Simplify mingw/unixy ifdefs for writing a file.
+       * Source/NSThread.m: Simplify mingw/unixy ifdefs for sleeping.
 
 2015-02-05     Niels Grewe <[email protected]>
 

Modified: libs/base/trunk/Source/NSThread.m
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Source/NSThread.m?rev=38336&r1=38335&r2=38336&view=diff
==============================================================================
--- libs/base/trunk/Source/NSThread.m   (original)
+++ libs/base/trunk/Source/NSThread.m   Sat Feb  7 12:01:53 2015
@@ -220,21 +220,62 @@
   delay = when - GSPrivateTimeNow();
   if (delay <= 0.0)
     {
+      /* We don't need to wait, but since we are willing to wait at this
+       * point, we should let other threads have preference over this one.
+       */
       sched_yield();
       return;
     }
 
+#if     defined(__MINGW__)
+  /*
+   * Avoid integer overflow by breaking up long sleeps.
+   */
+  while (delay > 30.0*60.0)
+    {
+      // sleep 30 minutes
+      Sleep (30*60*1000);
+      delay = when - GSPrivateTimeNow();
+    }
+
+  /* Don't use nanosleep (even if available) on mingw ... it's reported no
+   * to work with pthreads.
+   * Sleeping may return early because of signals, so we need to re-calculate
+   * the required delay and check to see if we need to sleep again.
+   */
+  while (delay > 0)
+    {
+#if    defined(HAVE_USLEEP)
+      /* On windows usleep() seems to perform a busy wait ... so we only
+       * use it for short delays ... otherwise use the less accurate Sleep()
+       */
+      if (delay > 0.1)
+       {
+          Sleep ((NSInteger)(delay*1000));
+       }
+      else
+       {
+          usleep ((NSInteger)(delay*1000000));
+       }
+#else
+      Sleep ((NSInteger)(delay*1000));
+#endif /* HAVE_USLEEP */
+      delay = when - GSPrivateTimeNow();
+    }
+
+#else   /* __MINGW__ */
+
+  /*
+   * Avoid integer overflow by breaking up long sleeps.
+   */
+  while (delay > 30.0*60.0)
+    {
+      // sleep 30 minutes
+      sleep(30*60);
+      delay = when - GSPrivateTimeNow();
+    }
+
 #ifdef HAVE_NANOSLEEP
-  // Avoid any possibility of overflow by sleeping in chunks.
-  while (delay > 32768)
-    {
-      struct timespec request;
-
-      request.tv_sec = (time_t)32768;
-      request.tv_nsec = (long)0;
-      nanosleep(&request, 0);
-      delay = when - GSPrivateTimeNow();
-    }
   if (delay > 0)
     {
       struct timespec request;
@@ -259,21 +300,7 @@
          remainder.tv_nsec = 0;
        }
     }
-#else
-
-  /*
-   * Avoid integer overflow by breaking up long sleeps.
-   */
-  while (delay > 30.0*60.0)
-    {
-      // sleep 30 minutes
-#if defined(__MINGW__)
-      Sleep (30*60*1000);
-#else
-      sleep (30*60);
-#endif
-      delay = when - GSPrivateTimeNow();
-    }
+#else   /* HAVE_NANOSLEEP */
 
   /*
    * sleeping may return early because of signals, so we need to re-calculate
@@ -281,32 +308,15 @@
    */
   while (delay > 0)
     {
-#if    defined(__MINGW__)
 #if    defined(HAVE_USLEEP)
-      /* On windows usleep() seems to perform a busy wait ... so we only
-       * use it for short delays ... otherwise use the less accurate Sleep()
-       */
-      if (delay > 0.1)
-       {
-          Sleep ((NSInteger)(delay*1000));
-       }
-      else
-       {
-          usleep ((NSInteger)(delay*1000000));
-       }
-#else
-      Sleep ((NSInteger)(delay*1000));
-#endif /* HAVE_USLEEP */
-#else
-#if    defined(HAVE_USLEEP)
-      usleep ((NSInteger)(delay*1000000));
-#else
-      sleep ((NSInteger)delay);
-#endif /* HAVE_USLEEP */
-#endif /* __MINGW__ */
+      usleep((NSInteger)(delay*1000000));
+#else  /* HAVE_USLEEP */
+      sleep((NSInteger)delay);
+#endif /* !HAVE_USLEEP */
       delay = when - GSPrivateTimeNow();
     }
-#endif /* HAVE_NANOSLEEP */
+#endif /* !HAVE_NANOSLEEP */
+#endif /* !__MINGW__ */
 }
 
 static NSArray *


_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs

Reply via email to