mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-31 16:50:58 +00:00
another mingw infconfig simplification to hopefully work with new mingw
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@38336 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
8b3b0d0db9
commit
40bfec157a
2 changed files with 57 additions and 46 deletions
|
@ -1,6 +1,7 @@
|
||||||
2015-02-07 Richard Frith-Macdonald <rfm@gnu.org>
|
2015-02-07 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
* Source/NSData.m: Simplify mingw/unixy ifdefs for writing a file.
|
* 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 <niels.grewe@halbordnung.de>
|
2015-02-05 Niels Grewe <niels.grewe@halbordnung.de>
|
||||||
|
|
||||||
|
|
|
@ -220,21 +220,62 @@ GSSleepUntilIntervalSinceReferenceDate(NSTimeInterval when)
|
||||||
delay = when - GSPrivateTimeNow();
|
delay = when - GSPrivateTimeNow();
|
||||||
if (delay <= 0.0)
|
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();
|
sched_yield();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_NANOSLEEP
|
#if defined(__MINGW__)
|
||||||
// Avoid any possibility of overflow by sleeping in chunks.
|
/*
|
||||||
while (delay > 32768)
|
* Avoid integer overflow by breaking up long sleeps.
|
||||||
|
*/
|
||||||
|
while (delay > 30.0*60.0)
|
||||||
{
|
{
|
||||||
struct timespec request;
|
// sleep 30 minutes
|
||||||
|
Sleep (30*60*1000);
|
||||||
request.tv_sec = (time_t)32768;
|
|
||||||
request.tv_nsec = (long)0;
|
|
||||||
nanosleep(&request, 0);
|
|
||||||
delay = when - GSPrivateTimeNow();
|
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
|
||||||
if (delay > 0)
|
if (delay > 0)
|
||||||
{
|
{
|
||||||
struct timespec request;
|
struct timespec request;
|
||||||
|
@ -259,21 +300,7 @@ GSSleepUntilIntervalSinceReferenceDate(NSTimeInterval when)
|
||||||
remainder.tv_nsec = 0;
|
remainder.tv_nsec = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else /* HAVE_NANOSLEEP */
|
||||||
|
|
||||||
/*
|
|
||||||
* 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();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* sleeping may return early because of signals, so we need to re-calculate
|
* sleeping may return early because of signals, so we need to re-calculate
|
||||||
|
@ -281,32 +308,15 @@ GSSleepUntilIntervalSinceReferenceDate(NSTimeInterval when)
|
||||||
*/
|
*/
|
||||||
while (delay > 0)
|
while (delay > 0)
|
||||||
{
|
{
|
||||||
#if defined(__MINGW__)
|
|
||||||
#if defined(HAVE_USLEEP)
|
#if defined(HAVE_USLEEP)
|
||||||
/* On windows usleep() seems to perform a busy wait ... so we only
|
usleep((NSInteger)(delay*1000000));
|
||||||
* use it for short delays ... otherwise use the less accurate Sleep()
|
#else /* HAVE_USLEEP */
|
||||||
*/
|
sleep((NSInteger)delay);
|
||||||
if (delay > 0.1)
|
#endif /* !HAVE_USLEEP */
|
||||||
{
|
|
||||||
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__ */
|
|
||||||
delay = when - GSPrivateTimeNow();
|
delay = when - GSPrivateTimeNow();
|
||||||
}
|
}
|
||||||
#endif /* HAVE_NANOSLEEP */
|
#endif /* !HAVE_NANOSLEEP */
|
||||||
|
#endif /* !__MINGW__ */
|
||||||
}
|
}
|
||||||
|
|
||||||
static NSArray *
|
static NSArray *
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue