Fix: sessiond: size-based rotations never trigger
[lttng-tools.git] / src / common / trigger.c
index a599fa3982b98853951d2f8f296007aa67fe4970..174f4b686edf5f49e282126149c49580a45b3dc7 100644 (file)
@@ -269,6 +269,10 @@ ssize_t lttng_trigger_create_from_payload(
                }
        }
 
+       if (trigger_comm->is_hidden) {
+               lttng_trigger_set_hidden(trigger);
+       }
+
        ret = offset;
 
 error:
@@ -311,6 +315,8 @@ int lttng_trigger_serialize(const struct lttng_trigger *trigger,
 
        trigger_comm.name_length = size_name;
 
+       trigger_comm.is_hidden = lttng_trigger_is_hidden(trigger);
+
        header_offset = payload->buffer.size;
        ret = lttng_dynamic_buffer_append(&payload->buffer, &trigger_comm,
                        sizeof(trigger_comm));
@@ -370,9 +376,26 @@ bool lttng_trigger_is_equal(
                return false;
        }
 
+       if (a->is_hidden != b->is_hidden) {
+               return false;
+       }
+
        return true;
 }
 
+LTTNG_HIDDEN
+bool lttng_trigger_is_hidden(const struct lttng_trigger *trigger)
+{
+       return trigger->is_hidden;
+}
+
+LTTNG_HIDDEN
+void lttng_trigger_set_hidden(struct lttng_trigger *trigger)
+{
+       assert(!trigger->is_hidden);
+       trigger->is_hidden = true;
+}
+
 LTTNG_HIDDEN
 enum lttng_trigger_status lttng_trigger_set_name(struct lttng_trigger *trigger,
                const char* name)
@@ -550,6 +573,40 @@ int lttng_triggers_add(
        return ret;
 }
 
+LTTNG_HIDDEN
+int lttng_triggers_remove_hidden_triggers(struct lttng_triggers *triggers)
+{
+       int ret;
+       unsigned int trigger_count, i = 0;
+       enum lttng_trigger_status trigger_status;
+
+       assert(triggers);
+
+       trigger_status = lttng_triggers_get_count(triggers, &trigger_count);
+       assert(trigger_status == LTTNG_TRIGGER_STATUS_OK);
+
+       while (i < trigger_count) {
+               const struct lttng_trigger *trigger =
+                               lttng_triggers_get_at_index(triggers, i);
+
+               if (lttng_trigger_is_hidden(trigger)) {
+                       ret = lttng_dynamic_pointer_array_remove_pointer(
+                                       &triggers->array, i);
+                       if (ret) {
+                               goto end;
+                       }
+
+                       trigger_count--;
+               } else {
+                       i++;
+               }
+       }
+
+       ret = 0;
+end:
+       return ret;
+}
+
 const struct lttng_trigger *lttng_triggers_get_at_index(
                const struct lttng_triggers *triggers, unsigned int index)
 {
@@ -705,8 +762,10 @@ LTTNG_HIDDEN
 void lttng_trigger_set_credentials(struct lttng_trigger *trigger,
                const struct lttng_credentials *creds)
 {
+       /* Triggers do not use the group id to authenticate the user. */
        assert(creds);
-       trigger->creds = *creds;
+       LTTNG_OPTIONAL_SET(&trigger->creds.uid, LTTNG_OPTIONAL_GET(creds->uid));
+       LTTNG_OPTIONAL_UNSET(&trigger->creds.gid);
 }
 
 enum lttng_trigger_status lttng_trigger_set_owner_uid(
@@ -942,6 +1001,7 @@ struct lttng_trigger *lttng_trigger_copy(const struct lttng_trigger *trigger)
 
        copy->tracer_token = trigger->tracer_token;
        copy->registered = trigger->registered;
+       copy->is_hidden = trigger->is_hidden;
        goto end;
 
 error_cleanup_trigger:
This page took 0.024755 seconds and 4 git commands to generate.