sessiond: add loglevels_match()
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Wed, 2 Sep 2015 15:31:35 +0000 (11:31 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 8 Sep 2015 14:00:43 +0000 (10:00 -0400)
UST and agent event loglevel matching algorithm is the same
so factor out this code into a common utility.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/bin/lttng-sessiond/agent.c
src/bin/lttng-sessiond/trace-ust.c
src/bin/lttng-sessiond/utils.c
src/bin/lttng-sessiond/utils.h

index 7797f8c26b57edd869ad651fcb31b175fbba4604..10e8b1f3a89ca859478a95c6855223ba5e069ced 100644 (file)
@@ -65,6 +65,7 @@ static int ht_match_event(struct cds_lfht_node *node,
 {
        struct agent_event *event;
        const struct agent_ht_key *key;
+       int ll_match;
 
        assert(node);
        assert(_key);
@@ -80,19 +81,11 @@ static int ht_match_event(struct cds_lfht_node *node,
        }
 
        /* Event loglevel value and type. */
-       if (event->loglevel_type == key->loglevel_type) {
-               /* Same loglevel type. */
-               if (key->loglevel_type != LTTNG_EVENT_LOGLEVEL_ALL) {
-                       /*
-                        * Loglevel value must also match since the loglevel
-                        * type is not all.
-                        */
-                       if (event->loglevel_value != key->loglevel_value) {
-                               goto no_match;
-                       }
-               }
-       } else {
-               /* Loglevel type is different: no match. */
+       ll_match = loglevels_match(event->loglevel_type,
+               event->loglevel_value, key->loglevel_type,
+               key->loglevel_value, LTTNG_EVENT_LOGLEVEL_ALL);
+
+       if (!ll_match) {
                goto no_match;
        }
 
index 1bc3c77806ae563e5fb972475ed11d49d5e4035d..4afb21385fefd08f66ec465032850cffc3c6793f 100644 (file)
@@ -71,6 +71,7 @@ int trace_ust_ht_match_event(struct cds_lfht_node *node, const void *_key)
        struct ltt_ust_event *event;
        const struct ltt_ust_ht_key *key;
        int ev_loglevel_value;
+       int ll_match;
 
        assert(node);
        assert(_key);
@@ -87,19 +88,11 @@ int trace_ust_ht_match_event(struct cds_lfht_node *node, const void *_key)
        }
 
        /* Event loglevel value and type. */
-       if (event->attr.loglevel_type == key->loglevel_type) {
-               /* Same loglevel type. */
-               if (key->loglevel_type != LTTNG_UST_LOGLEVEL_ALL) {
-                       /*
-                        * Loglevel value must also match since the loglevel
-                        * type is not all.
-                        */
-                       if (ev_loglevel_value != key->loglevel_value) {
-                               goto no_match;
-                       }
-               }
-       } else {
-               /* Loglevel type is different: no match. */
+       ll_match = loglevels_match(event->attr.loglevel_type,
+               ev_loglevel_value, key->loglevel_type,
+               key->loglevel_value, LTTNG_UST_LOGLEVEL_ALL);
+
+       if (!ll_match) {
                goto no_match;
        }
 
index fef31803f181b9c5aaebeec9b9e6dd025d30247f..f5f1cff638810207d17086f88a9af6b89fea768d 100644 (file)
@@ -72,3 +72,27 @@ void ht_cleanup_push(struct lttng_ht *ht)
 error:
        assert(!ret);
 }
+
+int loglevels_match(int a_loglevel_type, int a_loglevel_value,
+       int b_loglevel_type, int b_loglevel_value, int loglevel_all_type)
+{
+       int match = 1;
+
+       if (a_loglevel_type == b_loglevel_type) {
+               /* Same loglevel type. */
+               if (b_loglevel_type != loglevel_all_type) {
+                       /*
+                        * Loglevel value must also match since the loglevel
+                        * type is not all.
+                        */
+                       if (a_loglevel_value != b_loglevel_value) {
+                               match = 0;
+                       }
+               }
+       } else {
+               /* Loglevel type is different: no match. */
+               match = 0;
+       }
+
+       return match;
+}
index 7c06d5b03233e03320c6ab185fac0b495c44e579..2be72c20fc999e646a371b8c15fa3cc83ee51bb9 100644 (file)
@@ -23,5 +23,7 @@ struct lttng_ht;
 const char *get_home_dir(void);
 int notify_thread_pipe(int wpipe);
 void ht_cleanup_push(struct lttng_ht *ht);
+int loglevels_match(int a_loglevel_type, int a_loglevel_value,
+       int b_loglevel_type, int b_loglevel_value, int loglevel_all_type);
 
 #endif /* _LTT_UTILS_H */
This page took 0.028193 seconds and 4 git commands to generate.