tangled
alpha
login
or
join now
pyrox.dev
/
nixpkgs
lol
0
fork
atom
overview
issues
pulls
pipelines
gdbm: add upstream patch for test issues
Emily
9 months ago
e73384a7
f86f7531
+193
2 changed files
expand all
collapse all
unified
split
pkgs
by-name
gd
gdbm
package.nix
upstream-lockwait-test-fixes.patch
+1
pkgs/by-name/gd/gdbm/package.nix
···
18
18
patches = [
19
19
# Remove on next release.
20
20
./upstream-darwin-clock-nanosleep-fix.patch
21
21
+
./upstream-lockwait-test-fixes.patch
21
22
];
22
23
23
24
nativeBuildInputs = [ updateAutotoolsGnuConfigScriptsHook ];
+192
pkgs/by-name/gd/gdbm/upstream-lockwait-test-fixes.patch
···
1
1
+
From 5be83b4c5da7c6a68817908b19f8925af09e9b2c Mon Sep 17 00:00:00 2001
2
2
+
From: Sergey Poznyakoff <gray@gnu.org>
3
3
+
Date: Thu, 10 Apr 2025 17:31:56 +0300
4
4
+
Subject: Fix timeout calculation in lockwait signal test.
5
5
+
6
6
+
* tests/t_lockwait.c (runtest_signal): mark start time right
7
7
+
after setting alarm, not before it.
8
8
+
---
9
9
+
tests/t_lockwait.c | 5 ++---
10
10
+
1 file changed, 2 insertions(+), 3 deletions(-)
11
11
+
12
12
+
diff --git a/tests/t_lockwait.c b/tests/t_lockwait.c
13
13
+
index a5e74c8..3547af7 100644
14
14
+
--- a/tests/t_lockwait.c
15
15
+
+++ b/tests/t_lockwait.c
16
16
+
@@ -323,9 +323,6 @@ runtest_signal (struct timespec *ts)
17
17
+
struct sigaction act;
18
18
+
struct timeval now;
19
19
+
20
20
+
- gettimeofday (&now, NULL);
21
21
+
- start = tv_to_ms (&now);
22
22
+
-
23
23
+
if (pipe (sig_fd))
24
24
+
{
25
25
+
perror ("pipe");
26
26
+
@@ -341,6 +338,8 @@ runtest_signal (struct timespec *ts)
27
27
+
return -1;
28
28
+
}
29
29
+
alarm (ts_to_ms (&ts[1]) / MILLI);
30
30
+
+ gettimeofday (&now, NULL);
31
31
+
+ start = tv_to_ms (&now);
32
32
+
}
33
33
+
34
34
+
op.lock_wait = GDBM_LOCKWAIT_SIGNAL;
35
35
+
--
36
36
+
cgit v1.2.3
37
37
+
38
38
+
From 6f165a8e1745dbd9b88f6fb6882dff7997cfdf74 Mon Sep 17 00:00:00 2001
39
39
+
From: Sergey Poznyakoff <gray@gnu.org>
40
40
+
Date: Thu, 10 Apr 2025 21:07:41 +0300
41
41
+
Subject: More fixes to lockwait test
42
42
+
43
43
+
* tests/t_lockwait.c (sighan): Close fd.
44
44
+
(runtest_signal): compensate for alarm(2) second precision
45
45
+
---
46
46
+
tests/t_lockwait.c | 4 +++-
47
47
+
1 file changed, 3 insertions(+), 1 deletion(-)
48
48
+
49
49
+
diff --git a/tests/t_lockwait.c b/tests/t_lockwait.c
50
50
+
index 3547af7..b378819 100644
51
51
+
--- a/tests/t_lockwait.c
52
52
+
+++ b/tests/t_lockwait.c
53
53
+
@@ -170,6 +170,7 @@ static void
54
54
+
sighan (int sig)
55
55
+
{
56
56
+
write (sig_fd[1], &sig, sizeof (sig));
57
57
+
+ close (sig_fd[1]);
58
58
+
}
59
59
+
60
60
+
static int runtest_retry (struct timespec *ts);
61
61
+
@@ -364,7 +365,8 @@ runtest_signal (struct timespec *ts)
62
62
+
63
63
+
pfd.fd = sig_fd[0];
64
64
+
pfd.events = POLLIN;
65
65
+
- switch (poll (&pfd, 1, ts_to_ms (&ts[1]) - tv_to_ms (&now) + start)) {
66
66
+
+ switch (poll (&pfd, 1,
67
67
+
+ ts_to_ms (&ts[1]) - tv_to_ms (&now) + start + MILLI)) {
68
68
+
case 1:
69
69
+
break;
70
70
+
71
71
+
--
72
72
+
cgit v1.2.3
73
73
+
74
74
+
From aa9baca52ad155ae501ba586ff7b08f4b08e5434 Mon Sep 17 00:00:00 2001
75
75
+
From: Sergey Poznyakoff <gray@gnu.org>
76
76
+
Date: Fri, 11 Apr 2025 07:53:58 +0300
77
77
+
Subject: Adjust timeouts for setitimer interface in lockwait test.
78
78
+
79
79
+
* tests/t_lockwait.c: Setitimer (at least on some systems) restarts
80
80
+
the timer set by alarm(2). To calculate the ETA of SIGALRM, call
81
81
+
alarm after gdbm_open_ext returns.
82
82
+
---
83
83
+
tests/t_lockwait.c | 66 ++++++++++++++++++++++++++++++++----------------------
84
84
+
1 file changed, 39 insertions(+), 27 deletions(-)
85
85
+
86
86
+
diff --git a/tests/t_lockwait.c b/tests/t_lockwait.c
87
87
+
index b378819..dfae838 100644
88
88
+
--- a/tests/t_lockwait.c
89
89
+
+++ b/tests/t_lockwait.c
90
90
+
@@ -322,7 +322,6 @@ runtest_signal (struct timespec *ts)
91
91
+
if (!(ts[1].tv_sec == 0 && ts[1].tv_nsec == 0))
92
92
+
{
93
93
+
struct sigaction act;
94
94
+
- struct timeval now;
95
95
+
96
96
+
if (pipe (sig_fd))
97
97
+
{
98
98
+
@@ -338,9 +337,6 @@ runtest_signal (struct timespec *ts)
99
99
+
fprintf (stderr, "%s: sigaction: %s", progname, strerror (errno));
100
100
+
return -1;
101
101
+
}
102
102
+
- alarm (ts_to_ms (&ts[1]) / MILLI);
103
103
+
- gettimeofday (&now, NULL);
104
104
+
- start = tv_to_ms (&now);
105
105
+
}
106
106
+
107
107
+
op.lock_wait = GDBM_LOCKWAIT_SIGNAL;
108
108
+
@@ -354,42 +350,58 @@ runtest_signal (struct timespec *ts)
109
109
+
}
110
110
+
gdbm_close (dbf);
111
111
+
112
112
+
- if (start > 0)
113
113
+
+ if (!(ts[1].tv_sec == 0 && ts[1].tv_nsec == 0))
114
114
+
{
115
115
+
struct pollfd pfd;
116
116
+
struct timeval now;
117
117
+
- int sig;
118
118
+
+ int n, t, sig;
119
119
+
120
120
+
- restart:
121
121
+
+ alarm (ts_to_ms (&ts[1]) / MILLI);
122
122
+
gettimeofday (&now, NULL);
123
123
+
+ start = tv_to_ms (&now);
124
124
+
125
125
+
pfd.fd = sig_fd[0];
126
126
+
pfd.events = POLLIN;
127
127
+
- switch (poll (&pfd, 1,
128
128
+
- ts_to_ms (&ts[1]) - tv_to_ms (&now) + start + MILLI)) {
129
129
+
- case 1:
130
130
+
- break;
131
131
+
132
132
+
- case 0:
133
133
+
- fprintf (stderr, "%s: failed waiting for alarm\n", progname);
134
134
+
- return 1;
135
135
+
-
136
136
+
- default:
137
137
+
- if (errno == EINTR) goto restart;
138
138
+
- fprintf (stderr, "%s: poll: %s\n", progname, strerror (errno));
139
139
+
- return 1;
140
140
+
- }
141
141
+
-
142
142
+
- if (read (sig_fd[0], &sig, sizeof (sig)) != sizeof (sig))
143
143
+
+ do
144
144
+
{
145
145
+
- fprintf (stderr, "%s: read: %s\n", progname, strerror (errno));
146
146
+
- return 1;
147
147
+
+ gettimeofday (&now, NULL);
148
148
+
+ t = ts_to_ms (&ts[1]) - tv_to_ms (&now) + start + MILLI;
149
149
+
+ if (t < 0)
150
150
+
+ {
151
151
+
+ n = 0;
152
152
+
+ break;
153
153
+
+ }
154
154
+
}
155
155
+
- close (sig_fd[0]);
156
156
+
- if (sig != SIGALRM)
157
157
+
+ while ((n = poll (&pfd, 1, t)) == -1 && errno == EINTR);
158
158
+
+
159
159
+
+ switch (n)
160
160
+
{
161
161
+
- fprintf (stderr, "%s: unexpected data read\n", progname);
162
162
+
+ case 1:
163
163
+
+ if (read (sig_fd[0], &sig, sizeof (sig)) != sizeof (sig))
164
164
+
+ {
165
165
+
+ fprintf (stderr, "%s: read: %s\n", progname, strerror (errno));
166
166
+
+ return 1;
167
167
+
+ }
168
168
+
+ close (sig_fd[0]);
169
169
+
+ if (sig != SIGALRM)
170
170
+
+ {
171
171
+
+ fprintf (stderr, "%s: unexpected data read\n", progname);
172
172
+
+ return 1;
173
173
+
+ }
174
174
+
+ break;
175
175
+
+
176
176
+
+ case 0:
177
177
+
+ fprintf (stderr, "%s: failed waiting for alarm\n", progname);
178
178
+
return 1;
179
179
+
+
180
180
+
+ default:
181
181
+
+ if (errno != EINTR)
182
182
+
+ {
183
183
+
+ fprintf (stderr, "%s: poll: %s\n",
184
184
+
+ progname, strerror (errno));
185
185
+
+ return 1;
186
186
+
+ }
187
187
+
}
188
188
+
}
189
189
+
190
190
+
--
191
191
+
cgit v1.2.3
192
192
+