summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2014-05-14 02:47:07 -0700
committerChris Robinson <[email protected]>2014-05-14 02:47:07 -0700
commit1d2504d12e996a4c1e8fe9785901db9a9e3b4d7c (patch)
tree51895ba97192cee1fccab44a838e4fa43d81a984 /common
parent4454ae25c753388c529b937ae2ce0f47f06d16c4 (diff)
Make RefCount a non-integer type
It should only be accessed through the appropriate functions to ensure proper atomicity.
Diffstat (limited to 'common')
-rw-r--r--common/atomic.c6
-rw-r--r--common/rwlock.c4
2 files changed, 6 insertions, 4 deletions
diff --git a/common/atomic.c b/common/atomic.c
index 02bbf066..95b8f835 100644
--- a/common/atomic.c
+++ b/common/atomic.c
@@ -4,8 +4,10 @@
#include "atomic.h"
-extern inline RefCount IncrementRef(volatile RefCount *ptr);
-extern inline RefCount DecrementRef(volatile RefCount *ptr);
+extern inline void InitRef(volatile RefCount *ptr, uint value);
+extern inline uint ReadRef(volatile RefCount *ptr);
+extern inline uint IncrementRef(volatile RefCount *ptr);
+extern inline uint DecrementRef(volatile RefCount *ptr);
extern inline int ExchangeInt(volatile int *ptr, int newval);
extern inline void *ExchangePtr(XchgPtr *ptr, void *newval);
extern inline int CompExchangeInt(volatile int *ptr, int oldval, int newval);
diff --git a/common/rwlock.c b/common/rwlock.c
index b967db0a..ff7aa418 100644
--- a/common/rwlock.c
+++ b/common/rwlock.c
@@ -24,8 +24,8 @@ static void Unlock(volatile int *l)
void RWLockInit(RWLock *lock)
{
- lock->read_count = 0;
- lock->write_count = 0;
+ InitRef(&lock->read_count, 0);
+ InitRef(&lock->write_count, 0);
lock->read_lock = false;
lock->read_entry_lock = false;
lock->write_lock = false;