X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=src%2Fcommon%2Ftrigger.c;h=174f4b686edf5f49e282126149c49580a45b3dc7;hb=d2dc232d580ae18400445b6e34fabe1023208f20;hp=8a88c6d91ffb84d1e50a293dbca334b1bb4d0552;hpb=0f7c296359bf90005e1dadf2d7a02a4b223a8031;p=lttng-tools.git diff --git a/src/common/trigger.c b/src/common/trigger.c index 8a88c6d91..174f4b686 100644 --- a/src/common/trigger.c +++ b/src/common/trigger.c @@ -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) @@ -460,7 +483,7 @@ int lttng_trigger_generate_name(struct lttng_trigger *trigger, int ret = 0; char *generated_name = NULL; - ret = asprintf(&generated_name, "T%" PRIu64 "", unique_id); + ret = asprintf(&generated_name, "trigger%" PRIu64 "", unique_id); if (ret < 0) { ERR("Failed to generate trigger name"); ret = -1; @@ -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: