annotate tests/nap.h @ 40203:30d91797009f

autoupdate
author Karl Berry <karl@freefriends.org>
date Fri, 01 Mar 2019 08:42:42 -0800
parents b06060465f09
children 5a52ef2d4772
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12469
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
1 /* Assist in file system timestamp tests.
40057
b06060465f09 maint: Run 'make update-copyright'
Paul Eggert <eggert@cs.ucla.edu>
parents: 39853
diff changeset
2 Copyright (C) 2009-2019 Free Software Foundation, Inc.
12469
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
3
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
4 This program is free software: you can redistribute it and/or modify
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
6 the Free Software Foundation; either version 3 of the License, or
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
7 (at your option) any later version.
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
8
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
12 GNU General Public License for more details.
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
13
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
19190
9759915b2aca all: prefer https: URLs
Paul Eggert <eggert@cs.ucla.edu>
parents: 18820
diff changeset
15 along with this program. If not, see <https://www.gnu.org/licenses/>. */
12469
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
16
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
17 /* Written by Eric Blake <ebb9@byu.net>, 2009. */
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
18
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
19 #ifndef GLTEST_NAP_H
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
20 # define GLTEST_NAP_H
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
21
17377
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
22 # include <limits.h>
17416
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
23 # include <stdbool.h>
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
24
19210
fd018f74e8c3 maint: fix overflow checking in nap.h
Paul Eggert <eggert@cs.ucla.edu>
parents: 19190
diff changeset
25 # include <intprops.h>
fd018f74e8c3 maint: fix overflow checking in nap.h
Paul Eggert <eggert@cs.ucla.edu>
parents: 19190
diff changeset
26
18816
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
27 /* Name of the witness file. */
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
28 #define TEMPFILE BASE "nap.tmp"
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
29
17416
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
30 /* File descriptor used for the witness file. */
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
31 static int nap_fd = -1;
17377
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
32
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
33 /* Return A - B, in ns.
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
34 Return 0 if the true result would be negative.
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
35 Return INT_MAX if the true result would be greater than INT_MAX. */
17151
d20cbb4d40be test-utimens: speed up by taking shorter naps
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
36 static int
17377
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
37 diff_timespec (struct timespec a, struct timespec b)
17151
d20cbb4d40be test-utimens: speed up by taking shorter naps
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
38 {
17377
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
39 time_t as = a.tv_sec;
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
40 time_t bs = b.tv_sec;
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
41 int ans = a.tv_nsec;
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
42 int bns = b.tv_nsec;
19210
fd018f74e8c3 maint: fix overflow checking in nap.h
Paul Eggert <eggert@cs.ucla.edu>
parents: 19190
diff changeset
43 int sdiff;
fd018f74e8c3 maint: fix overflow checking in nap.h
Paul Eggert <eggert@cs.ucla.edu>
parents: 19190
diff changeset
44
fd018f74e8c3 maint: fix overflow checking in nap.h
Paul Eggert <eggert@cs.ucla.edu>
parents: 19190
diff changeset
45 ASSERT (0 <= ans && ans < 2000000000);
fd018f74e8c3 maint: fix overflow checking in nap.h
Paul Eggert <eggert@cs.ucla.edu>
parents: 19190
diff changeset
46 ASSERT (0 <= bns && bns < 2000000000);
17151
d20cbb4d40be test-utimens: speed up by taking shorter naps
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
47
17377
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
48 if (! (bs < as || (bs == as && bns < ans)))
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
49 return 0;
19210
fd018f74e8c3 maint: fix overflow checking in nap.h
Paul Eggert <eggert@cs.ucla.edu>
parents: 19190
diff changeset
50
fd018f74e8c3 maint: fix overflow checking in nap.h
Paul Eggert <eggert@cs.ucla.edu>
parents: 19190
diff changeset
51 if (INT_SUBTRACT_WRAPV (as, bs, &sdiff)
fd018f74e8c3 maint: fix overflow checking in nap.h
Paul Eggert <eggert@cs.ucla.edu>
parents: 19190
diff changeset
52 || INT_MULTIPLY_WRAPV (sdiff, 1000000000, &sdiff)
fd018f74e8c3 maint: fix overflow checking in nap.h
Paul Eggert <eggert@cs.ucla.edu>
parents: 19190
diff changeset
53 || INT_ADD_WRAPV (sdiff, ans - bns, &sdiff))
fd018f74e8c3 maint: fix overflow checking in nap.h
Paul Eggert <eggert@cs.ucla.edu>
parents: 19190
diff changeset
54 return INT_MAX;
fd018f74e8c3 maint: fix overflow checking in nap.h
Paul Eggert <eggert@cs.ucla.edu>
parents: 19190
diff changeset
55
fd018f74e8c3 maint: fix overflow checking in nap.h
Paul Eggert <eggert@cs.ucla.edu>
parents: 19190
diff changeset
56 return sdiff;
17151
d20cbb4d40be test-utimens: speed up by taking shorter naps
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
57 }
d20cbb4d40be test-utimens: speed up by taking shorter naps
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
58
18816
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
59 /* If DO_WRITE, bump the modification time of the file designated by NAP_FD.
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
60 Then fetch the new STAT information of NAP_FD. */
17151
d20cbb4d40be test-utimens: speed up by taking shorter naps
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
61 static void
18816
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
62 nap_get_stat (struct stat *st, int do_write)
17151
d20cbb4d40be test-utimens: speed up by taking shorter naps
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
63 {
d20cbb4d40be test-utimens: speed up by taking shorter naps
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
64 if (do_write)
18816
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
65 {
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
66 ASSERT (write (nap_fd, "\n", 1) == 1);
39853
508633341b55 stat-time tests: Fix test failure on Cygwin.
Bruno Haible <bruno@clisp.org>
parents: 19595
diff changeset
67 #if defined _WIN32 || defined __CYGWIN__
508633341b55 stat-time tests: Fix test failure on Cygwin.
Bruno Haible <bruno@clisp.org>
parents: 19595
diff changeset
68 /* On Windows, the modification times are not changed until NAP_FD
18816
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
69 is closed. See
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
70 https://msdn.microsoft.com/en-us/library/windows/desktop/aa365747(v=vs.85).aspx */
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
71 close (nap_fd);
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
72 nap_fd = open (TEMPFILE, O_RDWR, 0600);
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
73 ASSERT (nap_fd != -1);
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
74 lseek (nap_fd, 0, SEEK_END);
18820
4e86aec96518 nap.h: Fix compilation on non windows platforms
Pádraig Brady <P@draigBrady.com>
parents: 18816
diff changeset
75 #endif
18816
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
76 }
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
77 ASSERT (fstat (nap_fd, st) == 0);
17151
d20cbb4d40be test-utimens: speed up by taking shorter naps
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
78 }
d20cbb4d40be test-utimens: speed up by taking shorter naps
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
79
d20cbb4d40be test-utimens: speed up by taking shorter naps
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
80 /* Given a file whose descriptor is FD, see whether delaying by DELAY
18816
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
81 nanoseconds causes a change in a file's mtime.
17416
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
82 OLD_ST is the file's status, recently gotten. */
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
83 static bool
18816
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
84 nap_works (int delay, struct stat old_st)
17151
d20cbb4d40be test-utimens: speed up by taking shorter naps
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
85 {
17416
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
86 struct stat st;
17377
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
87 struct timespec delay_spec;
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
88 delay_spec.tv_sec = delay / 1000000000;
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
89 delay_spec.tv_nsec = delay % 1000000000;
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
90 ASSERT (nanosleep (&delay_spec, 0) == 0);
18816
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
91 nap_get_stat (&st, 1);
17377
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
92
18816
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
93 if (diff_timespec (get_stat_mtime (&st), get_stat_mtime (&old_st)))
17416
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
94 return true;
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
95
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
96 return false;
17151
d20cbb4d40be test-utimens: speed up by taking shorter naps
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
97 }
d20cbb4d40be test-utimens: speed up by taking shorter naps
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
98
17416
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
99 static void
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
100 clear_temp_file (void)
17151
d20cbb4d40be test-utimens: speed up by taking shorter naps
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
101 {
17416
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
102 if (0 <= nap_fd)
17377
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
103 {
17416
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
104 ASSERT (close (nap_fd) != -1);
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
105 ASSERT (unlink (TEMPFILE) != -1);
17377
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
106 }
17151
d20cbb4d40be test-utimens: speed up by taking shorter naps
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
107 }
d20cbb4d40be test-utimens: speed up by taking shorter naps
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
108
12469
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
109 /* Sleep long enough to notice a timestamp difference on the file
17416
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
110 system in the current directory. Use an adaptive approach, trying
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
111 to find the smallest delay which works on the current file system
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
112 to make the timestamp difference appear. Assert a maximum delay of
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
113 ~2 seconds, more precisely sum(2^n) from 0 to 30 = 2^31 - 1 = 2.1s.
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
114 Assumes that BASE is defined, and requires that the test module
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
115 depends on nanosleep. */
12469
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
116 static void
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
117 nap (void)
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
118 {
17416
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
119 struct stat old_st;
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
120 static int delay = 1;
17377
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
121
17416
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
122 if (-1 == nap_fd)
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
123 {
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
124 atexit (clear_temp_file);
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
125 ASSERT ((nap_fd = creat (TEMPFILE, 0600)) != -1);
18816
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
126 nap_get_stat (&old_st, 0);
17416
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
127 }
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
128 else
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
129 {
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
130 ASSERT (0 <= nap_fd);
18816
e1738f00d33a nap.h: Port to native Windows.
Bruno Haible <bruno@clisp.org>
parents: 18815
diff changeset
131 nap_get_stat (&old_st, 1);
17377
3c592b4deb04 utimensat-tests, etc.: try to fix some races
Paul Eggert <eggert@cs.ucla.edu>
parents: 17249
diff changeset
132 }
17416
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
133
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
134 if (1 < delay)
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
135 delay = delay / 2; /* Try half of the previous delay. */
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
136 ASSERT (0 < delay);
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
137
18815
f2845b0a9150 nap.h: Fix logic.
Bruno Haible <bruno@clisp.org>
parents: 18626
diff changeset
138 for (;;)
f2845b0a9150 nap.h: Fix logic.
Bruno Haible <bruno@clisp.org>
parents: 18626
diff changeset
139 {
f2845b0a9150 nap.h: Fix logic.
Bruno Haible <bruno@clisp.org>
parents: 18626
diff changeset
140 if (nap_works (delay, old_st))
f2845b0a9150 nap.h: Fix logic.
Bruno Haible <bruno@clisp.org>
parents: 18626
diff changeset
141 return;
f2845b0a9150 nap.h: Fix logic.
Bruno Haible <bruno@clisp.org>
parents: 18626
diff changeset
142 if (delay <= (2147483647 - 1) / 2)
f2845b0a9150 nap.h: Fix logic.
Bruno Haible <bruno@clisp.org>
parents: 18626
diff changeset
143 {
f2845b0a9150 nap.h: Fix logic.
Bruno Haible <bruno@clisp.org>
parents: 18626
diff changeset
144 delay = delay * 2 + 1;
f2845b0a9150 nap.h: Fix logic.
Bruno Haible <bruno@clisp.org>
parents: 18626
diff changeset
145 continue;
f2845b0a9150 nap.h: Fix logic.
Bruno Haible <bruno@clisp.org>
parents: 18626
diff changeset
146 }
f2845b0a9150 nap.h: Fix logic.
Bruno Haible <bruno@clisp.org>
parents: 18626
diff changeset
147 else
f2845b0a9150 nap.h: Fix logic.
Bruno Haible <bruno@clisp.org>
parents: 18626
diff changeset
148 break;
f2845b0a9150 nap.h: Fix logic.
Bruno Haible <bruno@clisp.org>
parents: 18626
diff changeset
149 }
17416
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
150
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
151 /* Bummer: even the highest nap delay didn't work. */
afd09cd62311 tests/nap.h: use an adaptive delay to avoid ctime update issues
Bernhard Voelker <mail@bernhard-voelker.de>
parents: 17377
diff changeset
152 ASSERT (0);
12469
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
153 }
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
154
8b48f88c47f1 test-utimens: avoid spurious failure
Eric Blake <ebb9@byu.net>
parents:
diff changeset
155 #endif /* GLTEST_NAP_H */