@@ -112,7 +112,11 @@ static void high_reader_count_test() {
112
112
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_rdlock (&rwlock), EAGAIN);
113
113
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_tryrdlock (&rwlock), EAGAIN);
114
114
// allocate 4 reader slots.
115
- rwlock.__state -= 4 * 4 ;
115
+ ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_unlock (&rwlock), 0 );
116
+ ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_unlock (&rwlock), 0 );
117
+ ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_unlock (&rwlock), 0 );
118
+ ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_unlock (&rwlock), 0 );
119
+
116
120
pthread_t threads[20 ];
117
121
for (auto &i : threads) {
118
122
ASSERT_EQ (LIBC_NAMESPACE::pthread_create (
@@ -345,8 +349,9 @@ randomized_process_operation(SharedData &data,
345
349
ASSERT_EQ (LIBC_NAMESPACE::pthread_create (
346
350
&i, nullptr ,
347
351
[](void *arg) -> void * {
348
- randomized_thread_operation (
349
- reinterpret_cast <SharedData *>(arg));
352
+ for (int i = 0 ; i < 5 ; ++i)
353
+ randomized_thread_operation (
354
+ reinterpret_cast <SharedData *>(arg));
350
355
return nullptr ;
351
356
},
352
357
&data),
@@ -359,7 +364,6 @@ randomized_process_operation(SharedData &data,
359
364
while (finish_count.load () != expected_count) {
360
365
LIBC_NAMESPACE::sleep_briefly ();
361
366
}
362
- ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_destroy (&data.lock ), 0 );
363
367
ASSERT_EQ (data.total_writer_count .load (), data.data );
364
368
ASSERT_FALSE (data.writer_flag );
365
369
ASSERT_EQ (data.reader_count , 0 );
@@ -378,6 +382,7 @@ static void single_process_test(int preference) {
378
382
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_init (&data.lock , nullptr ), 0 );
379
383
LIBC_NAMESPACE::cpp::Atomic<int > finish_count{0 };
380
384
randomized_process_operation (data, finish_count, 1 );
385
+ ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_destroy (&data.lock ), 0 );
381
386
}
382
387
383
388
static void multiple_process_test (int preference) {
@@ -388,6 +393,11 @@ static void multiple_process_test(int preference) {
388
393
PShared *shared_data = reinterpret_cast <PShared *>(
389
394
LIBC_NAMESPACE::mmap (nullptr , sizeof (PShared), PROT_READ | PROT_WRITE,
390
395
MAP_SHARED | MAP_ANONYMOUS, -1 , 0 ));
396
+ shared_data->data .data = 0 ;
397
+ shared_data->data .reader_count = 0 ;
398
+ shared_data->data .writer_flag = false ;
399
+ shared_data->data .total_writer_count .store (0 );
400
+ shared_data->finish_count .store (0 );
391
401
pthread_rwlockattr_t attr{};
392
402
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlockattr_init (&attr), 0 );
393
403
ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlockattr_setkind_np (&attr, preference),
@@ -406,6 +416,7 @@ static void multiple_process_test(int preference) {
406
416
LIBC_NAMESPACE::waitpid (pid, &status, 0 );
407
417
ASSERT_EQ (status, 0 );
408
418
}
419
+ ASSERT_EQ (LIBC_NAMESPACE::pthread_rwlock_destroy (&shared_data->data .lock ), 0 );
409
420
LIBC_NAMESPACE::munmap (shared_data, sizeof (PShared));
410
421
}
411
422
0 commit comments