X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fnotification-thread-commands.c;h=2908ccb76d3cdee0ade33cee9ccbd9b2c5d9e850;hp=d9fdf01588465a3e826bbc53b3a0e6cb35d29705;hb=HEAD;hpb=8ada111f6d3ab40d1c33cf1a7b2546de9a47d1d5 diff --git a/src/bin/lttng-sessiond/notification-thread-commands.c b/src/bin/lttng-sessiond/notification-thread-commands.c deleted file mode 100644 index d9fdf0158..000000000 --- a/src/bin/lttng-sessiond/notification-thread-commands.c +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Copyright (C) 2017 - Jérémie Galarneau - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License, version 2 only, as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 51 - * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include -#include -#include "notification-thread.h" -#include "notification-thread-commands.h" -#include -#include -#include -#include - -static -void init_notification_thread_command(struct notification_thread_command *cmd) -{ - memset(cmd, 0, sizeof(*cmd)); - CDS_INIT_LIST_HEAD(&cmd->cmd_list_node); - lttng_waiter_init(&cmd->reply_waiter); -} - -static -int run_command_wait(struct notification_thread_handle *handle, - struct notification_thread_command *cmd) -{ - int ret; - uint64_t notification_counter = 1; - - pthread_mutex_lock(&handle->cmd_queue.lock); - /* Add to queue. */ - cds_list_add_tail(&cmd->cmd_list_node, - &handle->cmd_queue.list); - /* Wake-up thread. */ - ret = write(handle->cmd_queue.event_fd, - ¬ification_counter, sizeof(notification_counter)); - if (ret < 0) { - PERROR("write to notification thread's queue event fd"); - /* - * Remove the command from the list so the notification - * thread does not process it. - */ - cds_list_del(&cmd->cmd_list_node); - goto error_unlock_queue; - } - pthread_mutex_unlock(&handle->cmd_queue.lock); - - lttng_waiter_wait(&cmd->reply_waiter); - return 0; -error_unlock_queue: - pthread_mutex_unlock(&handle->cmd_queue.lock); - return -1; -} - -enum lttng_error_code notification_thread_command_register_trigger( - struct notification_thread_handle *handle, - struct lttng_trigger *trigger) -{ - int ret; - enum lttng_error_code ret_code; - struct notification_thread_command cmd; - - init_notification_thread_command(&cmd); - - cmd.type = NOTIFICATION_COMMAND_TYPE_REGISTER_TRIGGER; - cmd.parameters.trigger = trigger; - - ret = run_command_wait(handle, &cmd); - if (ret) { - ret_code = LTTNG_ERR_UNK; - goto end; - } - ret_code = cmd.reply_code; -end: - return ret_code; -} - -enum lttng_error_code notification_thread_command_unregister_trigger( - struct notification_thread_handle *handle, - struct lttng_trigger *trigger) -{ - int ret; - enum lttng_error_code ret_code; - struct notification_thread_command cmd; - - init_notification_thread_command(&cmd); - - cmd.type = NOTIFICATION_COMMAND_TYPE_UNREGISTER_TRIGGER; - cmd.parameters.trigger = trigger; - - ret = run_command_wait(handle, &cmd); - if (ret) { - ret_code = LTTNG_ERR_UNK; - goto end; - } - ret_code = cmd.reply_code; -end: - return ret_code; -} - -enum lttng_error_code notification_thread_command_add_channel( - struct notification_thread_handle *handle, - char *session_name, uid_t uid, gid_t gid, - char *channel_name, uint64_t key, - enum lttng_domain_type domain, uint64_t capacity) -{ - int ret; - enum lttng_error_code ret_code; - struct notification_thread_command cmd; - - init_notification_thread_command(&cmd); - - cmd.type = NOTIFICATION_COMMAND_TYPE_ADD_CHANNEL; - cmd.parameters.add_channel.session_name = session_name; - cmd.parameters.add_channel.uid = uid; - cmd.parameters.add_channel.gid = gid; - cmd.parameters.add_channel.channel_name = channel_name; - cmd.parameters.add_channel.key.key = key; - cmd.parameters.add_channel.key.domain = domain; - cmd.parameters.add_channel.capacity = capacity; - - ret = run_command_wait(handle, &cmd); - if (ret) { - ret_code = LTTNG_ERR_UNK; - goto end; - } - ret_code = cmd.reply_code; -end: - return ret_code; -} - -enum lttng_error_code notification_thread_command_remove_channel( - struct notification_thread_handle *handle, - uint64_t key, enum lttng_domain_type domain) -{ - int ret; - enum lttng_error_code ret_code; - struct notification_thread_command cmd; - - init_notification_thread_command(&cmd); - - cmd.type = NOTIFICATION_COMMAND_TYPE_REMOVE_CHANNEL; - cmd.parameters.remove_channel.key = key; - cmd.parameters.remove_channel.domain = domain; - - ret = run_command_wait(handle, &cmd); - if (ret) { - ret_code = LTTNG_ERR_UNK; - goto end; - } - ret_code = cmd.reply_code; -end: - return ret_code; -} - -void notification_thread_command_quit( - struct notification_thread_handle *handle) -{ - int ret; - struct notification_thread_command cmd; - - init_notification_thread_command(&cmd); - - cmd.type = NOTIFICATION_COMMAND_TYPE_QUIT; - ret = run_command_wait(handle, &cmd); - assert(!ret && cmd.reply_code == LTTNG_OK); -}