#include <string.h>
#include <unistd.h>
+#include <common/bytecode/bytecode.h>
#include <common/common.h>
#include <common/compat/errno.h>
#include <common/compat/string.h>
#include <common/filter/filter-ast.h>
#include <common/filter/filter-parser.h>
-#include <common/filter/filter-bytecode.h>
#include <common/filter/memstream.h>
#include "lttng-ctl-helper.h"
assert(fd_count == 0 || fd_count == 1);
if (fd_count == 1) {
- struct fd_handle *handle =
+ struct fd_handle *h =
lttng_payload_view_pop_fd_handle(&view);
- if (!handle) {
+ if (!h) {
goto mem_error;
}
- fd_to_send = fd_handle_get_fd(handle);
- fd_handle_put(handle);
+ fd_to_send = fd_handle_get_fd(h);
+ fd_handle_put(h);
}
ret = lttng_ctl_ask_sessiond_fds_varlen(&lsm,
enum lttng_error_code ret_code;
ret_code = lttng_destroy_session_ext(session_name, NULL);
- return ret_code == LTTNG_OK ? ret_code : -ret_code;
+ return ret_code == LTTNG_OK ? 0 : -ret_code;
}
/*
return ret;
}
-int lttng_unregister_trigger(struct lttng_trigger *trigger)
+int lttng_unregister_trigger(const struct lttng_trigger *trigger)
{
int ret;
struct lttcomm_session_msg lsm;
struct lttcomm_session_msg *message_lsm;
struct lttng_payload message;
struct lttng_payload reply;
+ struct lttng_trigger *copy = NULL;
const struct lttng_credentials user_creds = {
.uid = LTTNG_OPTIONAL_INIT_VALUE(geteuid()),
.gid = LTTNG_OPTIONAL_INIT_UNSET,
goto end;
}
- if (!trigger->creds.uid.is_set) {
- /* Use the client's credentials as the trigger credentials. */
- lttng_trigger_set_credentials(trigger, &user_creds);
+ copy = lttng_trigger_copy(trigger);
+ if (!copy) {
+ ret = -LTTNG_ERR_UNK;
+ goto end;
+ }
+
+ if (!copy->creds.uid.is_set) {
+ /* Use the client credentials as the trigger credentials */
+ lttng_trigger_set_credentials(copy, &user_creds);
} else {
/*
* Validate that either the current trigger credentials and the
* "safety" checks.
*/
const struct lttng_credentials *trigger_creds =
- lttng_trigger_get_credentials(trigger);
-
+ lttng_trigger_get_credentials(copy);
if (!lttng_credentials_is_equal_uid(trigger_creds, &user_creds)) {
if (lttng_credentials_get_uid(&user_creds) != 0) {
ret = -LTTNG_ERR_EPERM;
}
}
- if (!lttng_trigger_validate(trigger)) {
+ if (!lttng_trigger_validate(copy)) {
ret = -LTTNG_ERR_INVALID_TRIGGER;
goto end;
}
*/
message_lsm = (struct lttcomm_session_msg *) message.buffer.data;
- ret = lttng_trigger_serialize(trigger, &message);
+ ret = lttng_trigger_serialize(copy, &message);
if (ret < 0) {
ret = -LTTNG_ERR_UNK;
goto end;
ret = 0;
end:
+ lttng_trigger_destroy(copy);
lttng_payload_reset(&message);
lttng_payload_reset(&reply);
return ret;