X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fmain.c;h=fce327314b526dbee05e648c4f65fe38d962d952;hp=f698fae4c634be7b3445d9dc0e6d29253352f549;hb=46440d0ccf65b098757389ffebb0f7452626c4a3;hpb=2d54bfb67f451a491c8cdfb6f6caea3981dc21a8 diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c index f698fae4c..fce327314 100644 --- a/src/bin/lttng-sessiond/main.c +++ b/src/bin/lttng-sessiond/main.c @@ -61,9 +61,8 @@ #include "event.h" #include "kernel.h" #include "kernel-consumer.h" -#include "modprobe.h" #include "shm.h" -#include "ust-ctl.h" +#include "lttng-ust-ctl.h" #include "ust-consumer.h" #include "utils.h" #include "fd-limit.h" @@ -75,7 +74,6 @@ #include "notification-thread.h" #include "notification-thread-commands.h" #include "rotation-thread.h" -#include "lttng-syscall.h" #include "agent.h" #include "ht-cleanup.h" #include "sessiond-config.h" @@ -97,6 +95,7 @@ NULL const char *progname; static int lockfile_fd = -1; +static int opt_print_version; /* Set to 1 when a SIGUSR1 signal is received. */ static int recv_child_signal; @@ -155,8 +154,6 @@ static int apps_cmd_notify_pipe[2] = { -1, -1 }; */ static struct ust_cmd_queue ust_cmd_queue; -static const char *module_proc_lttng = "/proc/lttng"; - /* * Section name to look for in the daemon configuration file. */ @@ -340,16 +337,7 @@ static void sessiond_cleanup(void) wait_consumer(&ustconsumer32_data); if (is_root && !config.no_kernel) { - DBG2("Closing kernel fd"); - if (kernel_tracer_fd >= 0) { - ret = close(kernel_tracer_fd); - if (ret) { - PERROR("close"); - } - } - DBG("Unloading kernel modules"); - modprobe_remove_lttng_all(); - free(syscall_table); + cleanup_kernel_tracer(); } /* @@ -371,81 +359,6 @@ static void sessiond_cleanup_options(void) run_as_destroy_worker(); } -/* - * Setup necessary data for kernel tracer action. - */ -static int init_kernel_tracer(void) -{ - int ret; - - /* Modprobe lttng kernel modules */ - ret = modprobe_lttng_control(); - if (ret < 0) { - goto error; - } - - /* Open debugfs lttng */ - kernel_tracer_fd = open(module_proc_lttng, O_RDWR); - if (kernel_tracer_fd < 0) { - DBG("Failed to open %s", module_proc_lttng); - goto error_open; - } - - /* Validate kernel version */ - ret = kernel_validate_version(kernel_tracer_fd, &kernel_tracer_version, - &kernel_tracer_abi_version); - if (ret < 0) { - goto error_version; - } - - ret = modprobe_lttng_data(); - if (ret < 0) { - goto error_modules; - } - - ret = kernel_supports_ring_buffer_snapshot_sample_positions( - kernel_tracer_fd); - if (ret < 0) { - goto error_modules; - } - - if (ret < 1) { - WARN("Kernel tracer does not support buffer monitoring. " - "The monitoring timer of channels in the kernel domain " - "will be set to 0 (disabled)."); - } - - DBG("Kernel tracer fd %d", kernel_tracer_fd); - return 0; - -error_version: - modprobe_remove_lttng_control(); - ret = close(kernel_tracer_fd); - if (ret) { - PERROR("close"); - } - kernel_tracer_fd = -1; - return LTTNG_ERR_KERN_VERSION; - -error_modules: - ret = close(kernel_tracer_fd); - if (ret) { - PERROR("close"); - } - -error_open: - modprobe_remove_lttng_control(); - -error: - WARN("No kernel tracer available"); - kernel_tracer_fd = -1; - if (!is_root) { - return LTTNG_ERR_NEED_ROOT_SESSIOND; - } else { - return LTTNG_ERR_KERN_NA; - } -} - static int string_match(const char *str1, const char *str2) { return (str1 && str2) && !strcmp(str1, str2); @@ -521,8 +434,7 @@ static int set_option(int opt, const char *arg, const char *optname) } exit(ret ? EXIT_FAILURE : EXIT_SUCCESS); } else if (string_match(optname, "version") || opt == 'V') { - fprintf(stdout, "%s\n", VERSION); - exit(EXIT_SUCCESS); + opt_print_version = 1; } else if (string_match(optname, "sig-parent") || opt == 'S') { config.sig_parent = true; } else if (string_match(optname, "kconsumerd-err-sock")) { @@ -877,6 +789,10 @@ end: return ret; } +static void print_version(void) { + fprintf(stdout, "%s\n", VERSION); +} + /* * daemon configuration loading and argument parsing */ @@ -1370,7 +1286,7 @@ static int launch_run_as_worker(const char *procname) static void sessiond_uuid_log(void) { - char uuid_str[UUID_STR_LEN]; + char uuid_str[LTTNG_UUID_STR_LEN]; lttng_uuid_to_str(sessiond_uuid, uuid_str); DBG("Starting lttng-sessiond {%s}", uuid_str); @@ -1474,6 +1390,12 @@ int main(int argc, char **argv) sessiond_config_log(&config); sessiond_uuid_log(); + if (opt_print_version) { + print_version(); + retval = 0; + goto exit_options; + } + if (create_lttng_rundir()) { retval = -1; goto exit_options; @@ -1641,14 +1563,6 @@ int main(int argc, char **argv) /* Setup kernel tracer */ if (!config.no_kernel) { init_kernel_tracer(); - if (kernel_tracer_fd >= 0) { - ret = syscall_init_table(); - if (ret < 0) { - ERR("Unable to populate syscall table. " - "Syscall tracing won't work " - "for this session daemon."); - } - } } /* Set ulimit for open files */ @@ -1915,7 +1829,9 @@ stop_threads: lttng_pipe_destroy(ust64_channel_monitor_pipe); lttng_pipe_destroy(kernel_channel_monitor_pipe); - health_app_destroy(health_sessiond); + if (health_sessiond) { + health_app_destroy(health_sessiond); + } exit_create_run_as_worker_cleanup: exit_options: sessiond_cleanup_lock_file();