@@ -273,7 +273,7 @@ enum class Operation : int {
273
273
COUNT = 6
274
274
};
275
275
276
- LIBC_NAMESPACE::RawMutex io_mutex{} ;
276
+ LIBC_NAMESPACE::RawMutex * io_mutex;
277
277
struct ThreadGuard {
278
278
Operation record[64 ]{};
279
279
size_t cursor = 0 ;
@@ -283,12 +283,12 @@ struct ThreadGuard {
283
283
return ;
284
284
pid_t pid = LIBC_NAMESPACE::syscall_impl (SYS_getpid);
285
285
pid_t tid = LIBC_NAMESPACE::syscall_impl (SYS_gettid);
286
- io_mutex. lock (LIBC_NAMESPACE::cpp::nullopt, true );
286
+ io_mutex-> lock (LIBC_NAMESPACE::cpp::nullopt, true );
287
287
LIBC_NAMESPACE::printf (" process %d thread %d: " , pid, tid);
288
288
for (size_t i = 0 ; i < cursor; ++i)
289
289
LIBC_NAMESPACE::printf (" %d " , static_cast <int >(record[i]));
290
290
LIBC_NAMESPACE::printf (" \n " );
291
- io_mutex. unlock (true );
291
+ io_mutex-> unlock (true );
292
292
}
293
293
};
294
294
@@ -459,6 +459,9 @@ static void multiple_process_test(int preference) {
459
459
}
460
460
461
461
TEST_MAIN () {
462
+ io_mutex = new (LIBC_NAMESPACE::mmap (
463
+ nullptr , sizeof (LIBC_NAMESPACE::RawMutex), PROT_READ | PROT_WRITE,
464
+ MAP_ANONYMOUS | MAP_SHARED, -1 , 0 )) LIBC_NAMESPACE::RawMutex ();
462
465
smoke_test ();
463
466
deadlock_detection_test ();
464
467
try_lock_test ();
@@ -472,5 +475,7 @@ TEST_MAIN() {
472
475
single_process_test (PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP);
473
476
multiple_process_test (PTHREAD_RWLOCK_PREFER_READER_NP);
474
477
multiple_process_test (PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP);
478
+ io_mutex->~RawMutex ();
479
+ LIBC_NAMESPACE::munmap (io_mutex, sizeof (LIBC_NAMESPACE::RawMutex));
475
480
return 0 ;
476
481
}
0 commit comments