@@ -114,8 +114,12 @@ static void nullptr_test() {
114
114
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_wrlock (nullptr ), EINVAL);
115
115
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_timedrdlock (nullptr , &ts), EINVAL);
116
116
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_timedwrlock (nullptr , &ts), EINVAL);
117
- ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_clockrdlock (nullptr , &ts), EINVAL);
118
- ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_clockwrlock (nullptr , &ts), EINVAL);
117
+ ASSERT_EQ (
118
+ LIBC_NAMESPACE::pthread_rwlock_clockrdlock (nullptr , CLOCK_MONOTONIC, &ts),
119
+ EINVAL);
120
+ ASSERT_EQ (
121
+ LIBC_NAMESPACE::pthread_rwlock_clockwrlock (nullptr , CLOCK_MONOTONIC, &ts),
122
+ EINVAL);
119
123
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_tryrdlock (nullptr ), EINVAL);
120
124
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_trywrlock (nullptr ), EINVAL);
121
125
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_unlock (nullptr ), EINVAL);
@@ -163,26 +167,40 @@ static void unusual_timespec_test() {
163
167
timespec ts = {0 , -1 };
164
168
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_timedrdlock (&rwlock, &ts), EINVAL);
165
169
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_timedwrlock (&rwlock, &ts), EINVAL);
166
- ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_clockrdlock (&rwlock, &ts), EINVAL);
167
- ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_clockwrlock (&rwlock, &ts), EINVAL);
170
+ ASSERT_EQ (
171
+ LIBC_NAMESPACE::pthread_rwlock_clockrdlock (&rwlock, CLOCK_MONOTONIC, &ts),
172
+ EINVAL);
173
+ ASSERT_EQ (
174
+ LIBC_NAMESPACE::pthread_rwlock_clockwrlock (&rwlock, CLOCK_MONOTONIC, &ts),
175
+ EINVAL);
168
176
ts.tv_nsec = 1'000'000'000 ;
169
177
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_timedrdlock (&rwlock, &ts), EINVAL);
170
- ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_clockrdlock (&rwlock, &ts), EINVAL);
171
- ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_clockwrlock (&rwlock, &ts), EINVAL);
178
+ ASSERT_EQ (
179
+ LIBC_NAMESPACE::pthread_rwlock_clockrdlock (&rwlock, CLOCK_MONOTONIC, &ts),
180
+ EINVAL);
181
+ ASSERT_EQ (
182
+ LIBC_NAMESPACE::pthread_rwlock_clockwrlock (&rwlock, CLOCK_MONOTONIC, &ts),
183
+ EINVAL);
172
184
ts.tv_nsec += 1 ;
173
185
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_timedwrlock (&rwlock, &ts), EINVAL);
174
- ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_clockrdlock (&rwlock, &ts), EINVAL);
175
- ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_clockwrlock (&rwlock, &ts), EINVAL);
186
+ ASSERT_EQ (
187
+ LIBC_NAMESPACE::pthread_rwlock_clockrdlock (&rwlock, CLOCK_MONOTONIC, &ts),
188
+ EINVAL);
189
+ ASSERT_EQ (
190
+ LIBC_NAMESPACE::pthread_rwlock_clockwrlock (&rwlock, CLOCK_MONOTONIC, &ts),
191
+ EINVAL);
176
192
ts.tv_nsec = 0 ;
177
193
ts.tv_sec = -1 ;
178
194
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_timedrdlock (&rwlock, &ts),
179
195
ETIMEDOUT);
180
196
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_timedwrlock (&rwlock, &ts),
181
197
ETIMEDOUT);
182
- ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_clockrdlock (&rwlock, &ts),
183
- ETIMEDOUT);
184
- ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_clockwrlock (&rwlock, &ts),
185
- ETIMEDOUT);
198
+ ASSERT_EQ (
199
+ LIBC_NAMESPACE::pthread_rwlock_clockrdlock (&rwlock, CLOCK_MONOTONIC, &ts),
200
+ ETIMEDOUT);
201
+ ASSERT_EQ (
202
+ LIBC_NAMESPACE::pthread_rwlock_clockwrlock (&rwlock, CLOCK_MONOTONIC, &ts),
203
+ ETIMEDOUT);
186
204
}
187
205
188
206
static void timedlock_with_deadlock_test () {
@@ -198,9 +216,12 @@ static void timedlock_with_deadlock_test() {
198
216
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_timedwrlock (&rwlock, &ts),
199
217
ETIMEDOUT);
200
218
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_timedrdlock (&rwlock, &ts), 0 );
201
- ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_clockwrlock (&rwlock, &ts),
202
- ETIMEDOUT);
203
- ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_clockrdlock (&rwlock, &ts), 0 );
219
+ ASSERT_EQ (
220
+ LIBC_NAMESPACE::pthread_rwlock_clockwrlock (&rwlock, CLOCK_MONOTONIC, &ts),
221
+ ETIMEDOUT);
222
+ ASSERT_EQ (
223
+ LIBC_NAMESPACE::pthread_rwlock_clockrdlock (&rwlock, CLOCK_MONOTONIC, &ts),
224
+ 0 );
204
225
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_unlock (&rwlock), 0 );
205
226
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_unlock (&rwlock), 0 );
206
227
// notice that ts is already expired, but the following should still succeed.
@@ -379,15 +400,17 @@ static void randomized_thread_operation(SharedData *data, ThreadGuard &guard) {
379
400
}
380
401
case Operation::CLOCK_READ: {
381
402
timespec ts = get_ts ();
382
- if (LIBC_NAMESPACE::pthread_rwlock_clockrdlock (&data->lock , &ts) == 0 ) {
403
+ if (LIBC_NAMESPACE::pthread_rwlock_clockrdlock (&data->lock , CLOCK_MONOTONIC,
404
+ &ts) == 0 ) {
383
405
read_ops ();
384
406
LIBC_NAMESPACE::pthread_rwlock_unlock (&data->lock );
385
407
}
386
408
break ;
387
409
}
388
410
case Operation::CLOCK_WRITE: {
389
411
timespec ts = get_ts ();
390
- if (LIBC_NAMESPACE::pthread_rwlock_clockwrlock (&data->lock , &ts) == 0 ) {
412
+ if (LIBC_NAMESPACE::pthread_rwlock_clockwrlock (&data->lock , CLOCK_MONOTONIC,
413
+ &ts) == 0 ) {
391
414
write_ops ();
392
415
LIBC_NAMESPACE::pthread_rwlock_unlock (&data->lock );
393
416
}
0 commit comments