[sheepdog] [PATCH v2 1/2] util: change type of uatomic_bool from unsigned long to struct
Hitoshi Mitake
mitake.hitoshi at lab.ntt.co.jp
Tue Jan 29 07:01:54 CET 2013
uatomic_bool shouldn't be typedefed unsigned long. Because it allows
simple assignment statements whose left expression is uatomic_bool
typed. This would cause subtle bugs.
This patch makes uatomic_bool as a typedefed struct. This forbid
illegal direct assignments to uatomic_bool variables.
Signed-off-by: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp>
---
include/util.h | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/util.h b/include/util.h
index 109af06..0a89985 100644
--- a/include/util.h
+++ b/include/util.h
@@ -107,23 +107,23 @@ void untrim_zero_sectors(void *buf, uint64_t offset, uint32_t len,
/* urcu helpers */
/* Boolean data type which can be accessed by multiple threads */
-typedef unsigned long uatomic_bool;
+typedef struct { unsigned long val; } uatomic_bool;
static inline bool uatomic_is_true(uatomic_bool *val)
{
- return uatomic_read(val) == 1;
+ return uatomic_read(&val->val) == 1;
}
/* success if the old value is false */
static inline bool uatomic_set_true(uatomic_bool *val)
{
- return uatomic_cmpxchg(val, 0, 1) == 0;
+ return uatomic_cmpxchg(&val->val, 0, 1) == 0;
}
static inline void uatomic_set_false(uatomic_bool *val)
{
assert(uatomic_is_true(val));
- uatomic_set(val, 0);
+ uatomic_set(&val->val, 0);
}
#endif
--
1.7.2.5
More information about the sheepdog
mailing list