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