else :; \
fi
+# Prefer xnanosleep over other less-precise sleep methods
+sc_prohibit_sleep:
+ @re='\<(nano|u)?sleep \(' \
+ msg='prefer xnanosleep over other sleep interfaces' \
+ $(_prohibit_regexp)
+
include $(srcdir)/dist-check.mk
#include "strnumcmp.h"
#include "xmemcoll.h"
#include "xmemxfrm.h"
+#include "xnanosleep.h"
#include "xstrtol.h"
#if HAVE_SYS_RESOURCE_H
/* The number of times we should try to fork a compression process
(we retry if the fork call fails). We don't _need_ to compress
temp files, this is just to reduce disk access, so this number
- can be small. */
- MAX_FORK_TRIES_COMPRESS = 2,
+ can be small. Each retry doubles in duration. */
+ MAX_FORK_TRIES_COMPRESS = 4,
/* The number of times we should try to fork a decompression process.
If we can't fork a decompression process, we can't sort, so this
- number should be big. */
- MAX_FORK_TRIES_DECOMPRESS = 8
+ number should be big. Each retry doubles in duration. */
+ MAX_FORK_TRIES_DECOMPRESS = 9
};
/* The representation of the decimal point in the current locale. */
#if HAVE_WORKING_FORK
struct tempnode *saved_temphead;
int saved_errno;
- unsigned int wait_retry = 1;
+ double wait_retry = 0.25;
pid_t pid IF_LINT (= -1);
struct cs_status cs;
break;
else
{
- sleep (wait_retry);
+ xnanosleep (wait_retry);
wait_retry *= 2;
reap_some ();
}
/* Before the tail function provided `read_pos', there was
a race condition described in the URL below. This sleep
call made the window big enough to exercise the problem. */
- sleep (1);
+ xnanosleep (1);
#endif
f->errnum = ok - 1;
if (fstat (fd, &stats) < 0)