Implement health check for app registration dispatch
[lttng-tools.git] / src / bin / lttng-sessiond / health.h
index 91a90706a77928acbcaa2fdd83bf8b958f69e7c1..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,
 };
@@ -73,24 +76,31 @@ struct health_state {
 /* Declare TLS health state. */
 extern DECLARE_URCU_TLS(struct health_state, health_state);
 
-/* Health state counters for the client command thread */
-extern struct health_state health_thread_cmd;
-
-/* Health state counters for the application management thread */
-extern struct health_state health_thread_app_manage;
-
-/* Health state counters for the application registration thread */
-extern struct health_state health_thread_app_reg;
+/*
+ * 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_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));
 
-/* Health state counters for the kernel thread */
-extern struct health_state health_thread_kernel;
+       uatomic_add(&URCU_TLS(health_state).current, HEALTH_POLL_VALUE);
+}
 
 /*
- * 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 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_update(struct health_state *state)
+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);
 }
 
@@ -98,7 +108,7 @@ static inline void health_poll_update(struct health_state *state)
  * Update current counter by 2 indicates progress in execution of a
  * thread.
  */
-static inline void health_code_update(struct health_state *state)
+static inline void health_code_update(void)
 {
        uatomic_add(&URCU_TLS(health_state).current, HEALTH_CODE_VALUE);
 }
@@ -106,7 +116,7 @@ static inline void health_code_update(struct health_state *state)
 /*
  * Set health "error" flag.
  */
-static inline void health_error(struct health_state *state)
+static inline void health_error(void)
 {
        uatomic_or(&URCU_TLS(health_state).flags, HEALTH_ERROR);
 }
This page took 0.025237 seconds and 5 git commands to generate.