X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fmain.c;h=3cb970c06e21c62c50b42a2e7466ead067a493f9;hp=521c78868118b409b4c122a80fb837cc267bbde8;hb=ab08a675ad07e246b49e7a00927dfd13c1e58ce4;hpb=3cede4fe1597481f6cbf508ddf3d24e024405ed2 diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c index 521c78868..3cb970c06 100644 --- a/src/bin/lttng-sessiond/main.c +++ b/src/bin/lttng-sessiond/main.c @@ -38,12 +38,11 @@ #include #include -#include -#include +#include +#include +#include #include #include -#include -#include #include "lttng-sessiond.h" #include "channel.h" @@ -51,6 +50,7 @@ #include "event.h" #include "futex.h" #include "kernel.h" +#include "modprobe.h" #include "shm.h" #include "ust-ctl.h" #include "utils.h" @@ -77,7 +77,7 @@ struct consumer_data { /* Const values */ const char default_home_dir[] = DEFAULT_HOME_DIR; -const char default_tracing_group[] = LTTNG_DEFAULT_TRACING_GROUP; +const char default_tracing_group[] = DEFAULT_TRACING_GROUP; const char default_ust_sock_dir[] = DEFAULT_UST_SOCK_DIR; const char default_global_apps_pipe[] = DEFAULT_GLOBAL_APPS_PIPE; @@ -98,18 +98,18 @@ static char *rundir; /* Consumer daemon specific control data */ static struct consumer_data kconsumer_data = { .type = LTTNG_CONSUMER_KERNEL, - .err_unix_sock_path = KCONSUMERD_ERR_SOCK_PATH, - .cmd_unix_sock_path = KCONSUMERD_CMD_SOCK_PATH, + .err_unix_sock_path = DEFAULT_KCONSUMERD_ERR_SOCK_PATH, + .cmd_unix_sock_path = DEFAULT_KCONSUMERD_CMD_SOCK_PATH, }; static struct consumer_data ustconsumer64_data = { .type = LTTNG_CONSUMER64_UST, - .err_unix_sock_path = USTCONSUMERD64_ERR_SOCK_PATH, - .cmd_unix_sock_path = USTCONSUMERD64_CMD_SOCK_PATH, + .err_unix_sock_path = DEFAULT_USTCONSUMERD64_ERR_SOCK_PATH, + .cmd_unix_sock_path = DEFAULT_USTCONSUMERD64_CMD_SOCK_PATH, }; static struct consumer_data ustconsumer32_data = { .type = LTTNG_CONSUMER32_UST, - .err_unix_sock_path = USTCONSUMERD32_ERR_SOCK_PATH, - .cmd_unix_sock_path = USTCONSUMERD32_CMD_SOCK_PATH, + .err_unix_sock_path = DEFAULT_USTCONSUMERD32_ERR_SOCK_PATH, + .cmd_unix_sock_path = DEFAULT_USTCONSUMERD32_CMD_SOCK_PATH, }; static int dispatch_thread_exit; @@ -215,11 +215,11 @@ void setup_consumerd_path(void) if (bin) { consumerd64_bin = bin; } - libdir = getenv("LTTNG_TOOLS_CONSUMERD32_LIBDIR"); + libdir = getenv("LTTNG_CONSUMERD32_LIBDIR"); if (libdir) { consumerd32_libdir = libdir; } - libdir = getenv("LTTNG_TOOLS_CONSUMERD64_LIBDIR"); + libdir = getenv("LTTNG_CONSUMERD64_LIBDIR"); if (libdir) { consumerd64_libdir = libdir; } @@ -269,41 +269,6 @@ static int check_thread_quit_pipe(int fd, uint32_t events) return 0; } -/* - * Remove modules in reverse load order. - */ -static int modprobe_remove_kernel_modules(void) -{ - int ret = 0, i; - char modprobe[256]; - - for (i = ARRAY_SIZE(kernel_modules_list) - 1; i >= 0; i--) { - ret = snprintf(modprobe, sizeof(modprobe), - "/sbin/modprobe -r -q %s", - kernel_modules_list[i].name); - if (ret < 0) { - perror("snprintf modprobe -r"); - goto error; - } - modprobe[sizeof(modprobe) - 1] = '\0'; - ret = system(modprobe); - if (ret == -1) { - ERR("Unable to launch modprobe -r for module %s", - kernel_modules_list[i].name); - } else if (kernel_modules_list[i].required - && WEXITSTATUS(ret) != 0) { - ERR("Unable to remove module %s", - kernel_modules_list[i].name); - } else { - DBG("Modprobe removal successful %s", - kernel_modules_list[i].name); - } - } - -error: - return ret; -} - /* * Return group ID of the tracing group or -1 if not found. */ @@ -349,7 +314,7 @@ error: static void teardown_kernel_session(struct ltt_session *session) { if (!session->kernel_session) { - DBG3("No kernel session when tearingdown session"); + DBG3("No kernel session when tearing down session"); return; } @@ -375,7 +340,7 @@ static void teardown_ust_session(struct ltt_session *session) int ret; if (!session->ust_session) { - DBG3("No UST session when tearingdown session"); + DBG3("No UST session when tearing down session"); return; } @@ -432,7 +397,7 @@ static void cleanup(void) } free(cmd); - DBG("Cleaning up all session"); + DBG("Cleaning up all sessions"); /* Destroy session list mutex */ if (session_list_ptr != NULL) { @@ -456,7 +421,7 @@ static void cleanup(void) DBG2("Closing kernel fd"); close(kernel_tracer_fd); DBG("Unloading kernel modules"); - modprobe_remove_kernel_modules(); + modprobe_remove_lttng_all(); } close(thread_quit_pipe[0]); @@ -804,12 +769,18 @@ static void update_ust_app(int app_sock) { struct ltt_session *sess, *stmp; + session_lock_list(); + /* For all tracing session(s) */ cds_list_for_each_entry_safe(sess, stmp, &session_list_ptr->head, list) { + session_lock(sess); if (sess->ust_session) { ust_app_global_update(sess->ust_session, app_sock); } + session_unlock(sess); } + + session_unlock_list(); } /* @@ -860,8 +831,15 @@ static void *thread_manage_kernel(void *data) lttng_poll_reset(&events); /* Poll infinite value of time */ + restart: ret = lttng_poll_wait(&events, -1); if (ret < 0) { + /* + * Restart interrupted system call. + */ + if (errno == EINTR) { + goto restart; + } goto error; } else if (ret == 0) { /* Should not happen since timeout is infinite */ @@ -951,8 +929,15 @@ static void *thread_manage_consumer(void *data) nb_fd = LTTNG_POLL_GETNB(&events); /* Inifinite blocking call, waiting for transmission */ +restart: ret = lttng_poll_wait(&events, -1); if (ret < 0) { + /* + * Restart interrupted system call. + */ + if (errno == EINTR) { + goto restart; + } goto error; } @@ -1022,8 +1007,15 @@ static void *thread_manage_consumer(void *data) nb_fd = LTTNG_POLL_GETNB(&events); /* Inifinite blocking call, waiting for transmission */ +restart_poll: ret = lttng_poll_wait(&events, -1); if (ret < 0) { + /* + * Restart interrupted system call. + */ + if (errno == EINTR) { + goto restart_poll; + } goto error; } @@ -1106,8 +1098,15 @@ static void *thread_manage_apps(void *data) DBG("Apps thread polling on %d fds", nb_fd); /* Inifinite blocking call, waiting for transmission */ + restart: ret = lttng_poll_wait(&events, -1); if (ret < 0) { + /* + * Restart interrupted system call. + */ + if (errno == EINTR) { + goto restart; + } goto error; } @@ -1145,10 +1144,16 @@ static void *thread_manage_apps(void *data) } /* - * Add channel(s) and event(s) to newly registered apps - * from lttng global UST domain. + * Validate UST version compatibility. */ - update_ust_app(ust_cmd.sock); + ret = ust_app_validate_version(ust_cmd.sock); + if (ret >= 0) { + /* + * Add channel(s) and event(s) to newly registered apps + * from lttng global UST domain. + */ + update_ust_app(ust_cmd.sock); + } ret = ust_app_register_done(ust_cmd.sock); if (ret < 0) { @@ -1161,8 +1166,10 @@ static void *thread_manage_apps(void *data) /* * We just need here to monitor the close of the UST * socket and poll set monitor those by default. + * Listen on POLLIN (even if we never expect any + * data) to ensure that hangup wakes us. */ - ret = lttng_poll_add(&events, ust_cmd.sock, 0); + ret = lttng_poll_add(&events, ust_cmd.sock, LPOLLIN); if (ret < 0) { goto error; } @@ -1319,8 +1326,15 @@ static void *thread_registration_apps(void *data) nb_fd = LTTNG_POLL_GETNB(&events); /* Inifinite blocking call, waiting for transmission */ + restart: ret = lttng_poll_wait(&events, -1); if (ret < 0) { + /* + * Restart interrupted system call. + */ + if (errno == EINTR) { + goto restart; + } goto error; } @@ -1702,147 +1716,64 @@ error: } /* - * modprobe_kernel_modules + * Check version of the lttng-modules. */ -static int modprobe_kernel_modules(void) +static int validate_lttng_modules_version(void) { - int ret = 0, i; - char modprobe[256]; - - for (i = 0; i < ARRAY_SIZE(kernel_modules_list); i++) { - ret = snprintf(modprobe, sizeof(modprobe), - "/sbin/modprobe %s%s", - kernel_modules_list[i].required ? "" : "-q ", - kernel_modules_list[i].name); - if (ret < 0) { - perror("snprintf modprobe"); - goto error; - } - modprobe[sizeof(modprobe) - 1] = '\0'; - ret = system(modprobe); - if (ret == -1) { - ERR("Unable to launch modprobe for module %s", - kernel_modules_list[i].name); - } else if (kernel_modules_list[i].required - && WEXITSTATUS(ret) != 0) { - ERR("Unable to load module %s", - kernel_modules_list[i].name); - } else { - DBG("Modprobe successfully %s", - kernel_modules_list[i].name); - } - } - -error: - return ret; + return kernel_validate_version(kernel_tracer_fd); } /* - * mount_debugfs + * Setup necessary data for kernel tracer action. */ -static int mount_debugfs(char *path) +static int init_kernel_tracer(void) { int ret; - char *type = "debugfs"; - - ret = run_as_mkdir_recursive(path, S_IRWXU | S_IRWXG, geteuid(), getegid()); - if (ret < 0) { - PERROR("Cannot create debugfs path"); - goto error; - } - ret = mount(type, path, type, 0, NULL); + /* Modprobe lttng kernel modules */ + ret = modprobe_lttng_control(); if (ret < 0) { - PERROR("Cannot mount debugfs"); - goto error; - } - - DBG("Mounted debugfs successfully at %s", path); - -error: - return ret; -} - -/* - * Setup necessary data for kernel tracer action. - */ -static void init_kernel_tracer(void) -{ - int ret; - char *proc_mounts = "/proc/mounts"; - char line[256]; - char *debugfs_path = NULL, *lttng_path = NULL; - FILE *fp; - - /* Detect debugfs */ - fp = fopen(proc_mounts, "r"); - if (fp == NULL) { - ERR("Unable to probe %s", proc_mounts); goto error; } - while (fgets(line, sizeof(line), fp) != NULL) { - if (strstr(line, "debugfs") != NULL) { - /* Remove first string */ - strtok(line, " "); - /* Dup string here so we can reuse line later on */ - debugfs_path = strdup(strtok(NULL, " ")); - DBG("Got debugfs path : %s", debugfs_path); - break; - } - } - - fclose(fp); - - /* Mount debugfs if needded */ - if (debugfs_path == NULL) { - ret = asprintf(&debugfs_path, "/mnt/debugfs"); - if (ret < 0) { - perror("asprintf debugfs path"); - goto error; - } - ret = mount_debugfs(debugfs_path); - if (ret < 0) { - perror("Cannot mount debugfs"); - 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); + ret = -1; + goto error_open; } - /* Modprobe lttng kernel modules */ - ret = modprobe_kernel_modules(); + /* Validate kernel version */ + ret = validate_lttng_modules_version(); if (ret < 0) { - goto error; + goto error_version; } - /* Setup lttng kernel path */ - ret = asprintf(<tng_path, "%s/lttng", debugfs_path); + ret = modprobe_lttng_data(); if (ret < 0) { - perror("asprintf lttng path"); - goto error; - } - - /* Open debugfs lttng */ - kernel_tracer_fd = open(lttng_path, O_RDWR); - if (kernel_tracer_fd < 0) { - DBG("Failed to open %s", lttng_path); - goto error; + goto error_modules; } - free(lttng_path); - free(debugfs_path); DBG("Kernel tracer fd %d", kernel_tracer_fd); - return; + return 0; + +error_version: + modprobe_remove_lttng_control(); + close(kernel_tracer_fd); + kernel_tracer_fd = 0; + return LTTCOMM_KERN_VERSION; + +error_modules: + close(kernel_tracer_fd); + +error_open: + modprobe_remove_lttng_control(); error: - if (lttng_path) { - free(lttng_path); - } - if (debugfs_path) { - free(debugfs_path); - } WARN("No kernel tracer available"); kernel_tracer_fd = 0; - return; + return LTTCOMM_KERN_NA; } /* @@ -2143,8 +2074,17 @@ static int list_lttng_ust_global_events(char *channel_name, case LTTNG_UST_FUNCTION: tmp[i].type = LTTNG_EVENT_FUNCTION; break; - case LTTNG_UST_TRACEPOINT_LOGLEVEL: - tmp[i].type = LTTNG_EVENT_TRACEPOINT_LOGLEVEL; + } + tmp[i].loglevel = uevent->attr.loglevel; + switch (uevent->attr.loglevel_type) { + case LTTNG_UST_LOGLEVEL_ALL: + tmp[i].loglevel_type = LTTNG_EVENT_LOGLEVEL_ALL; + break; + case LTTNG_UST_LOGLEVEL_RANGE: + tmp[i].loglevel_type = LTTNG_EVENT_LOGLEVEL_RANGE; + break; + case LTTNG_UST_LOGLEVEL_SINGLE: + tmp[i].loglevel_type = LTTNG_EVENT_LOGLEVEL_SINGLE; break; } i++; @@ -2271,11 +2211,11 @@ static int cmd_disable_channel(struct ltt_session *session, } break; } +#if 0 case LTTNG_DOMAIN_UST_PID_FOLLOW_CHILDREN: case LTTNG_DOMAIN_UST_EXEC_NAME: case LTTNG_DOMAIN_UST_PID: - ret = LTTCOMM_NOT_IMPLEMENTED; - goto error; +#endif default: ret = LTTCOMM_UNKNOWN_DOMAIN; goto error; @@ -2334,11 +2274,11 @@ static int cmd_enable_channel(struct ltt_session *session, } break; } +#if 0 case LTTNG_DOMAIN_UST_PID_FOLLOW_CHILDREN: case LTTNG_DOMAIN_UST_EXEC_NAME: case LTTNG_DOMAIN_UST_PID: - ret = LTTCOMM_NOT_IMPLEMENTED; - goto error; +#endif default: ret = LTTCOMM_UNKNOWN_DOMAIN; goto error; @@ -2401,11 +2341,13 @@ static int cmd_disable_event(struct ltt_session *session, int domain, channel_name); break; } +#if 0 case LTTNG_DOMAIN_UST_EXEC_NAME: case LTTNG_DOMAIN_UST_PID: case LTTNG_DOMAIN_UST_PID_FOLLOW_CHILDREN: +#endif default: - ret = LTTCOMM_NOT_IMPLEMENTED; + ret = LTTCOMM_UND; goto error; } @@ -2468,11 +2410,13 @@ static int cmd_disable_event_all(struct ltt_session *session, int domain, break; } +#if 0 case LTTNG_DOMAIN_UST_EXEC_NAME: case LTTNG_DOMAIN_UST_PID: case LTTNG_DOMAIN_UST_PID_FOLLOW_CHILDREN: +#endif default: - ret = LTTCOMM_NOT_IMPLEMENTED; + ret = LTTCOMM_UND; goto error; } @@ -2509,11 +2453,13 @@ static int cmd_add_context(struct ltt_session *session, int domain, } break; } +#if 0 case LTTNG_DOMAIN_UST_EXEC_NAME: case LTTNG_DOMAIN_UST_PID: case LTTNG_DOMAIN_UST_PID_FOLLOW_CHILDREN: +#endif default: - ret = LTTCOMM_NOT_IMPLEMENTED; + ret = LTTCOMM_UND; goto error; } @@ -2525,12 +2471,6 @@ error: /* * Command LTTNG_ENABLE_EVENT processed by the client thread. - * - * TODO: currently, both events and loglevels are kept within the same - * namespace for UST global registry/app registery, so if an event - * happen to have the same name as the loglevel (very unlikely though), - * and an attempt is made to enable/disable both in the same session, - * the first to be created will be the only one allowed to exist. */ static int cmd_enable_event(struct ltt_session *session, int domain, char *channel_name, struct lttng_event *event) @@ -2624,11 +2564,13 @@ static int cmd_enable_event(struct ltt_session *session, int domain, } break; } +#if 0 case LTTNG_DOMAIN_UST_EXEC_NAME: case LTTNG_DOMAIN_UST_PID: case LTTNG_DOMAIN_UST_PID_FOLLOW_CHILDREN: +#endif default: - ret = LTTCOMM_NOT_IMPLEMENTED; + ret = LTTCOMM_UND; goto error; } @@ -2759,11 +2701,13 @@ static int cmd_enable_event_all(struct ltt_session *session, int domain, break; } +#if 0 case LTTNG_DOMAIN_UST_EXEC_NAME: case LTTNG_DOMAIN_UST_PID: case LTTNG_DOMAIN_UST_PID_FOLLOW_CHILDREN: +#endif default: - ret = LTTCOMM_NOT_IMPLEMENTED; + ret = LTTCOMM_UND; goto error; } @@ -2797,7 +2741,7 @@ static ssize_t cmd_list_tracepoints(int domain, struct lttng_event **events) } break; default: - ret = LTTCOMM_NOT_IMPLEMENTED; + ret = LTTCOMM_UND; goto error; } @@ -3026,9 +2970,20 @@ static int cmd_calibrate(int domain, struct lttng_calibrate *calibrate) } break; } + case LTTNG_DOMAIN_UST: + { + struct lttng_ust_calibrate ucalibrate; + + ucalibrate.type = calibrate->type; + ret = ust_app_calibrate_glb(&ucalibrate); + if (ret < 0) { + ret = LTTCOMM_UST_CALIBRATE_FAIL; + goto error; + } + break; + } default: - /* TODO: Userspace tracing */ - ret = LTTCOMM_NOT_IMPLEMENTED; + ret = LTTCOMM_UND; goto error; } @@ -3064,7 +3019,7 @@ static int cmd_register_consumer(struct ltt_session *session, int domain, break; default: /* TODO: Userspace tracing */ - ret = LTTCOMM_NOT_IMPLEMENTED; + ret = LTTCOMM_UND; goto error; } @@ -3140,7 +3095,7 @@ static ssize_t cmd_list_channels(int domain, struct ltt_session *session, break; default: *channels = NULL; - ret = -LTTCOMM_NOT_IMPLEMENTED; + ret = -LTTCOMM_UND; goto error; } @@ -3187,7 +3142,7 @@ static ssize_t cmd_list_events(int domain, struct ltt_session *session, break; } default: - ret = -LTTCOMM_NOT_IMPLEMENTED; + ret = -LTTCOMM_UND; goto error; } @@ -3208,10 +3163,25 @@ static int process_client_msg(struct command_ctx *cmd_ctx) { int ret = LTTCOMM_OK; int need_tracing_session = 1; + int need_domain; DBG("Processing client command %d", cmd_ctx->lsm->cmd_type); - if (opt_no_kernel && cmd_ctx->lsm->domain.type == LTTNG_DOMAIN_KERNEL) { + switch (cmd_ctx->lsm->cmd_type) { + case LTTNG_CREATE_SESSION: + case LTTNG_DESTROY_SESSION: + case LTTNG_LIST_SESSIONS: + case LTTNG_LIST_DOMAINS: + case LTTNG_START_TRACE: + case LTTNG_STOP_TRACE: + need_domain = 0; + break; + default: + need_domain = 1; + } + + if (opt_no_kernel && need_domain + && cmd_ctx->lsm->domain.type == LTTNG_DOMAIN_KERNEL) { ret = LTTCOMM_KERN_NA; goto error; } @@ -3239,8 +3209,8 @@ static int process_client_msg(struct command_ctx *cmd_ctx) /* Commands that DO NOT need a session. */ switch (cmd_ctx->lsm->cmd_type) { - case LTTNG_CALIBRATE: case LTTNG_CREATE_SESSION: + case LTTNG_CALIBRATE: case LTTNG_LIST_SESSIONS: case LTTNG_LIST_TRACEPOINTS: need_tracing_session = 0; @@ -3265,6 +3235,9 @@ static int process_client_msg(struct command_ctx *cmd_ctx) break; } + if (!need_domain) { + goto skip_domain; + } /* * Check domain type for specific "pre-action". */ @@ -3278,9 +3251,8 @@ static int process_client_msg(struct command_ctx *cmd_ctx) /* Kernel tracer check */ if (kernel_tracer_fd == 0) { /* Basically, load kernel tracer modules */ - init_kernel_tracer(); - if (kernel_tracer_fd == 0) { - ret = LTTCOMM_KERN_NA; + ret = init_kernel_tracer(); + if (ret != 0) { goto error; } } @@ -3359,6 +3331,7 @@ static int process_client_msg(struct command_ctx *cmd_ctx) default: break; } +skip_domain: /* * Check that the UID or GID match that of the tracing session. @@ -3393,7 +3366,6 @@ static int process_client_msg(struct command_ctx *cmd_ctx) ret = cmd_disable_event(cmd_ctx->session, cmd_ctx->lsm->domain.type, cmd_ctx->lsm->u.disable.channel_name, cmd_ctx->lsm->u.disable.name); - ret = LTTCOMM_OK; break; } case LTTNG_DISABLE_ALL_EVENT: @@ -3561,11 +3533,7 @@ static int process_client_msg(struct command_ctx *cmd_ctx) session_lock_list(); nr_sessions = lttng_sessions_count(cmd_ctx->creds.uid, cmd_ctx->creds.gid); - if (nr_sessions == 0) { - ret = LTTCOMM_NO_SESSION; - session_unlock_list(); - goto error; - } + ret = setup_lttng_msg(cmd_ctx, sizeof(struct lttng_session) * nr_sessions); if (ret < 0) { session_unlock_list(); @@ -3654,7 +3622,7 @@ static void *thread_manage_clients(void *data) * Notify parent pid that we are ready to accept command for client side. */ if (opt_sig_parent) { - kill(ppid, SIGCHLD); + kill(ppid, SIGUSR1); } while (1) { @@ -3663,8 +3631,15 @@ static void *thread_manage_clients(void *data) nb_fd = LTTNG_POLL_GETNB(&events); /* Inifinite blocking call, waiting for transmission */ + restart: ret = lttng_poll_wait(&events, -1); if (ret < 0) { + /* + * Restart interrupted system call. + */ + if (errno == EINTR) { + goto restart; + } goto error; } @@ -3989,24 +3964,19 @@ end: */ static int check_existing_daemon(void) { - if (access(client_unix_sock_path, F_OK) < 0 && - access(apps_unix_sock_path, F_OK) < 0) { - return 0; - } - /* Is there anybody out there ? */ if (lttng_session_daemon_alive()) { return -EEXIST; - } else { - return 0; } + + return 0; } /* * Set the tracing group gid onto the client socket. * * Race window between mkdir and chown is OK because we are going from more - * permissive (root.root) to les permissive (root.tracing). + * permissive (root.root) to less permissive (root.tracing). */ static int set_permissions(char *rundir) { @@ -4027,6 +3997,13 @@ static int set_permissions(char *rundir) perror("chown"); } + /* Ensure tracing group can search the run dir */ + ret = chmod(rundir, S_IRWXU | S_IXGRP | S_IXOTH); + if (ret < 0) { + ERR("Unable to set permissions on %s", rundir); + perror("chmod"); + } + /* lttng client socket path */ ret = chown(client_unix_sock_path, 0, gid); if (ret < 0) { @@ -4086,7 +4063,7 @@ static int create_lttng_rundir(const char *rundir) DBG3("Creating LTTng run directory: %s", rundir); - ret = mkdir(rundir, S_IRWXU | S_IRWXG ); + ret = mkdir(rundir, S_IRWXU); if (ret < 0) { if (errno != EEXIST) { ERR("Unable to create %s", rundir); @@ -4112,13 +4089,13 @@ static int set_consumer_sockets(struct consumer_data *consumer_data, switch (consumer_data->type) { case LTTNG_CONSUMER_KERNEL: - snprintf(path, PATH_MAX, KCONSUMERD_PATH, rundir); + snprintf(path, PATH_MAX, DEFAULT_KCONSUMERD_PATH, rundir); break; case LTTNG_CONSUMER64_UST: - snprintf(path, PATH_MAX, USTCONSUMERD64_PATH, rundir); + snprintf(path, PATH_MAX, DEFAULT_USTCONSUMERD64_PATH, rundir); break; case LTTNG_CONSUMER32_UST: - snprintf(path, PATH_MAX, USTCONSUMERD32_PATH, rundir); + snprintf(path, PATH_MAX, DEFAULT_USTCONSUMERD32_PATH, rundir); break; default: ERR("Consumer type unknown"); @@ -4128,7 +4105,7 @@ static int set_consumer_sockets(struct consumer_data *consumer_data, DBG2("Creating consumer directory: %s", path); - ret = mkdir(path, S_IRWXU | S_IRWXG); + ret = mkdir(path, S_IRWXU); if (ret < 0) { if (errno != EEXIST) { ERR("Failed to create %s", path); @@ -4169,14 +4146,14 @@ static void sighandler(int sig) { switch (sig) { case SIGPIPE: - DBG("SIGPIPE caugth"); + DBG("SIGPIPE caught"); return; case SIGINT: - DBG("SIGINT caugth"); + DBG("SIGINT caught"); stop_threads(); break; case SIGTERM: - DBG("SIGTERM caugth"); + DBG("SIGTERM caught"); stop_threads(); break; default: @@ -4250,6 +4227,8 @@ int main(int argc, char **argv) void *status; const char *home_path; + init_kernel_workarounds(); + rcu_register_thread(); /* Create thread quit pipe */ @@ -4278,7 +4257,7 @@ int main(int argc, char **argv) is_root = !getuid(); if (is_root) { - rundir = strdup(LTTNG_RUNDIR); + rundir = strdup(DEFAULT_LTTNG_RUNDIR); /* Create global run dir with root access */ ret = create_lttng_rundir(rundir); @@ -4304,9 +4283,9 @@ int main(int argc, char **argv) /* Setup kernel consumerd path */ snprintf(kconsumer_data.err_unix_sock_path, PATH_MAX, - KCONSUMERD_ERR_SOCK_PATH, rundir); + DEFAULT_KCONSUMERD_ERR_SOCK_PATH, rundir); snprintf(kconsumer_data.cmd_unix_sock_path, PATH_MAX, - KCONSUMERD_CMD_SOCK_PATH, rundir); + DEFAULT_KCONSUMERD_CMD_SOCK_PATH, rundir); DBG2("Kernel consumer err path: %s", kconsumer_data.err_unix_sock_path); @@ -4325,7 +4304,7 @@ int main(int argc, char **argv) * Create rundir from home path. This will create something like * $HOME/.lttng */ - ret = asprintf(&rundir, LTTNG_HOME_RUNDIR, home_path); + ret = asprintf(&rundir, DEFAULT_LTTNG_HOME_RUNDIR, home_path); if (ret < 0) { ret = -ENOMEM; goto error; @@ -4360,9 +4339,9 @@ int main(int argc, char **argv) /* 32 bits consumerd path setup */ snprintf(ustconsumer32_data.err_unix_sock_path, PATH_MAX, - USTCONSUMERD32_ERR_SOCK_PATH, rundir); + DEFAULT_USTCONSUMERD32_ERR_SOCK_PATH, rundir); snprintf(ustconsumer32_data.cmd_unix_sock_path, PATH_MAX, - USTCONSUMERD32_CMD_SOCK_PATH, rundir); + DEFAULT_USTCONSUMERD32_CMD_SOCK_PATH, rundir); DBG2("UST consumer 32 bits err path: %s", ustconsumer32_data.err_unix_sock_path); @@ -4371,9 +4350,9 @@ int main(int argc, char **argv) /* 64 bits consumerd path setup */ snprintf(ustconsumer64_data.err_unix_sock_path, PATH_MAX, - USTCONSUMERD64_ERR_SOCK_PATH, rundir); + DEFAULT_USTCONSUMERD64_ERR_SOCK_PATH, rundir); snprintf(ustconsumer64_data.cmd_unix_sock_path, PATH_MAX, - USTCONSUMERD64_CMD_SOCK_PATH, rundir); + DEFAULT_USTCONSUMERD64_CMD_SOCK_PATH, rundir); DBG2("UST consumer 64 bits err path: %s", ustconsumer64_data.err_unix_sock_path);