Implement health check for app registration dispatch
[lttng-tools.git] / src / bin / lttng-sessiond / health.h
index 34d2052e5249f8ce145005cfb3dafe5275b67bf6..d04d18b78ff4b436f59dae699892638f98e8c565 100644 (file)
@@ -44,6 +44,9 @@ enum health_type {
        HEALTH_TYPE_APP_REG             = 2,
        HEALTH_TYPE_KERNEL              = 3,
        HEALTH_TYPE_CONSUMER    = 4,
+       HEALTH_TYPE_HT_CLEANUP          = 5,
+       HEALTH_TYPE_APP_MANAGE_NOTIFY   = 6,
+       HEALTH_TYPE_APP_REG_DISPATCH    = 7,
 
        HEALTH_NUM_TYPE,
 };
@@ -74,11 +77,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.025269 seconds and 5 git commands to generate.