Fix: change health poll update to entry/exit calls
[lttng-tools.git] / src / bin / lttng-sessiond / health.h
index 34d2052e5249f8ce145005cfb3dafe5275b67bf6..28d7dc64959387703dcb10e001b945cb1f6e5995 100644 (file)
@@ -74,11 +74,30 @@ struct health_state {
 extern DECLARE_URCU_TLS(struct health_state, health_state);
 
 /*
- * Update current counter by 1 to indicate that the thread entered or
- * left a blocking state caused by a poll().
+ * Update current counter by 1 to indicate that the thread entered or left a
+ * blocking state caused by a poll(). If the counter's value is not an even
+ * number (meaning a code execution flow), an assert() is raised.
  */
-static inline void health_poll_update(void)
+static inline void health_poll_entry(void)
 {
+       /* Code MUST be in code execution state which is an even number. */
+       assert(!(uatomic_read(&URCU_TLS(health_state).current)
+                               & HEALTH_POLL_VALUE));
+
+       uatomic_add(&URCU_TLS(health_state).current, HEALTH_POLL_VALUE);
+}
+
+/*
+ * Update current counter by 1 indicating the exit of a poll or blocking call.
+ * If the counter's value is not an odd number (a poll execution), an assert()
+ * is raised.
+ */
+static inline void health_poll_exit(void)
+{
+       /* Code MUST be in poll execution state which is an odd number. */
+       assert(uatomic_read(&URCU_TLS(health_state).current)
+                               & HEALTH_POLL_VALUE);
+
        uatomic_add(&URCU_TLS(health_state).current, HEALTH_POLL_VALUE);
 }
 
This page took 0.022951 seconds and 4 git commands to generate.