- size_t trigger_len;
- ssize_t sock_recv_len;
- struct lttng_trigger *trigger = NULL;
- struct lttng_payload trigger_payload;
- struct lttng_credentials cmd_creds = {
- .uid = LTTNG_OPTIONAL_INIT_VALUE(cmd_ctx->creds.uid),
- .gid = LTTNG_OPTIONAL_INIT_VALUE(cmd_ctx->creds.gid),
- };
-
- lttng_payload_init(&trigger_payload);
- trigger_len = (size_t) cmd_ctx->lsm.u.trigger.length;
- ret = lttng_dynamic_buffer_set_size(
- &trigger_payload.buffer, trigger_len);
- if (ret) {
- ret = LTTNG_ERR_NOMEM;
- goto end;
- }
-
- sock_recv_len = lttcomm_recv_unix_sock(
- sock, trigger_payload.buffer.data, trigger_len);
- if (sock_recv_len < 0 || sock_recv_len != trigger_len) {
- ERR("Failed to receive \"unregister trigger\" command payload");
- /* TODO: should this be a new error enum ? */
- ret = LTTNG_ERR_INVALID_TRIGGER;
- goto end;
- }
-
- /* Receive fds, if any. */
- if (cmd_ctx->lsm.fd_count > 0) {
- ret = lttcomm_recv_payload_fds_unix_sock(
- sock, cmd_ctx->lsm.fd_count, &trigger_payload);
- if (ret > 0 && ret != cmd_ctx->lsm.fd_count * sizeof(int)) {
- ret = LTTNG_ERR_INVALID_PROTOCOL;
- goto end;
- } else if (ret <= 0) {
- ret = LTTNG_ERR_FATAL;
- goto end;
- }
- }
-
- {
- struct lttng_payload_view view =
- lttng_payload_view_from_payload(
- &trigger_payload, 0, -1);
-
- if (lttng_trigger_create_from_payload(&view, &trigger) !=
- trigger_len) {
- ERR("Invalid trigger payload received in \"unregister trigger\" command");
- ret = LTTNG_ERR_INVALID_TRIGGER;
- goto end;
- }
- }