File Coverage

lib/SPVM/Builder/src/spvm_mutex.c
Criterion Covered Total %
statement 20 20 100.0
branch 6 12 50.0
condition n/a
subroutine n/a
pod n/a
total 26 32 81.2


line stmt bran cond sub pod time code
1             // Copyright (c) 2023 Yuki Kimoto
2             // MIT License
3              
4             #include "spvm_mutex.h"
5             #include "spvm_allocator.h"
6              
7             #if defined(_WIN32)
8              
9             #include
10              
11             void SPVM_MUTEX_init(void* mutex) {
12            
13             InitializeSRWLock((SRWLOCK*)mutex);
14             }
15              
16             void SPVM_MUTEX_destroy(void* mutex) {
17            
18             }
19              
20             void SPVM_MUTEX_lock (void* mutex) {
21             AcquireSRWLockExclusive((SRWLOCK*)mutex);
22             }
23              
24             void SPVM_MUTEX_unlock (void* mutex) {
25             ReleaseSRWLockExclusive((SRWLOCK*)mutex);
26             }
27              
28             void SPVM_MUTEX_reader_lock (void* mutex) {
29             AcquireSRWLockShared((SRWLOCK*)mutex);
30             }
31              
32             void SPVM_MUTEX_reader_unlock (void* mutex) {
33             ReleaseSRWLockShared((SRWLOCK*)mutex);
34             }
35              
36             int32_t SPVM_MUTEX_size () {
37             return sizeof(SRWLOCK);
38             }
39              
40             #else
41              
42             #include
43             #include
44             #include
45              
46             #define SAFE_PTHREAD(fncall) \
47             do { \
48             if ((fncall) != 0) abort(); \
49             } while (0)
50              
51 531024           void SPVM_MUTEX_init(void* mutex) {
52            
53 531024 50         SAFE_PTHREAD(pthread_rwlock_init((pthread_rwlock_t*)mutex, NULL));
54 531024           }
55              
56 528219           void SPVM_MUTEX_destroy(void* mutex) {
57 528219 50         SAFE_PTHREAD(pthread_rwlock_destroy((pthread_rwlock_t*)mutex));
58 528219           }
59              
60 11010703           void SPVM_MUTEX_lock (void* mutex) {
61 11010703 50         SAFE_PTHREAD(pthread_rwlock_wrlock((pthread_rwlock_t*)mutex));
62 11010703           }
63              
64 11010703           void SPVM_MUTEX_unlock (void* mutex) {
65 11010703 50         SAFE_PTHREAD(pthread_rwlock_unlock((pthread_rwlock_t*)mutex));
66 11010703           }
67              
68 317937           void SPVM_MUTEX_reader_lock (void* mutex) {
69 317937 50         SAFE_PTHREAD(pthread_rwlock_rdlock((pthread_rwlock_t*)mutex));
70 317937           }
71              
72 317937           void SPVM_MUTEX_reader_unlock (void* mutex) {
73 317937 50         SAFE_PTHREAD(pthread_rwlock_unlock((pthread_rwlock_t*)mutex));
74 317937           }
75              
76 5711102           int32_t SPVM_MUTEX_size () {
77 5711102           return sizeof(pthread_rwlock_t);
78             }
79              
80             #endif