X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=tests%2Fust-basic-tracing%2Fust-basic-tracing.c;h=e9b9ea6d17a5697e640d5ae7f3a18bdb1ba9effd;hb=fb31eb73d8a4a6d9784ed5c335b7fa3b9684108c;hp=91a910a689b9d1841ed73d0d7c7860af905f5e60;hpb=9d335227b11499758dc06d97822ba2ebeeb0fd5c;p=lttng-ust.git diff --git a/tests/ust-basic-tracing/ust-basic-tracing.c b/tests/ust-basic-tracing/ust-basic-tracing.c index 91a910a6..e9b9ea6d 100644 --- a/tests/ust-basic-tracing/ust-basic-tracing.c +++ b/tests/ust-basic-tracing/ust-basic-tracing.c @@ -4,42 +4,47 @@ * Copyright (C) 2011 - Mathieu Desnoyers * Copyright (C) 2011 - David Goulet * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; only version 2 of the License. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License only. * - * 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. + * 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., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307, USA. + * 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. */ #define _LARGEFILE64_SOURCE #define _GNU_SOURCE +#include #include +#include +#include +#include +#include #include #include #include -#include -#include -#include -#include -#include -#include #include -#include +#include +#include +#include +#include +#include +#include +#include #include #include -#include -#include #include +#include #include "../../libringbuffer/backend.h" #include "../../libringbuffer/frontend.h" +#include "../../liblttng-ust/compat.h" /* For ENODATA */ #define MAX_NR_STREAMS 64 #define MAX_NR_EVENTS 128 @@ -82,7 +87,7 @@ int open_streams(int sock, int channel_handle, struct lttng_ust_object_data *str stream_datas[k].handle = lur.ret_val; printf("received stream handle %u\n", stream_datas[k].handle); - if (lur.ret_code == USTCOMM_OK) { + if (lur.ret_code == LTTNG_UST_OK) { ssize_t len; stream_datas[k].memory_map_size = lur.u.stream.memory_map_size; @@ -99,7 +104,7 @@ int open_streams(int sock, int channel_handle, struct lttng_ust_object_data *str } k++; } - if (ret == -ENOENT) + if (ret == -LTTNG_UST_ERR_NOENT) break; if (ret) return ret; @@ -220,7 +225,7 @@ int consume_stream(struct lttng_ust_shm_handle *handle, int cpu, char *outfile) } /* copy */ - outfd = open(outfile, O_WRONLY | O_CREAT | O_LARGEFILE | O_TRUNC, + outfd = open(outfile, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); if (outfd < 0) { perror("open output"); @@ -353,7 +358,7 @@ int send_app_msgs(int sock, const char *outputpath, return ret; metadata_data.handle = lur.ret_val; printf("received metadata handle %u\n", metadata_data.handle); - if (lur.ret_code == USTCOMM_OK) { + if (lur.ret_code == LTTNG_UST_OK) { ssize_t len; metadata_data.memory_map_size = lur.u.channel.memory_map_size; @@ -394,7 +399,7 @@ int send_app_msgs(int sock, const char *outputpath, return ret; channel_data.handle = lur.ret_val; printf("received channel handle %u\n", channel_data.handle); - if (lur.ret_code == USTCOMM_OK) { + if (lur.ret_code == LTTNG_UST_OK) { ssize_t len; channel_data.memory_map_size = lur.u.channel.memory_map_size; @@ -638,11 +643,19 @@ error: int update_futex(int fd, int active) { - size_t mmap_size = sysconf(_SC_PAGE_SIZE); + long page_size; char *wait_shm_mmap; int ret; - wait_shm_mmap = mmap(NULL, mmap_size, PROT_READ | PROT_WRITE, + page_size = sysconf(_SC_PAGE_SIZE); + if (page_size <= 0) { + if (!page_size) { + errno = EINVAL; + } + perror("Error in sysconf(_SC_PAGE_SIZE)"); + goto error; + } + wait_shm_mmap = mmap(NULL, page_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (wait_shm_mmap == MAP_FAILED) { perror("mmap"); @@ -651,12 +664,15 @@ int update_futex(int fd, int active) if (active) { uatomic_set((int32_t *) wait_shm_mmap, 1); - futex_async((int32_t *) wait_shm_mmap, FUTEX_WAKE, - INT_MAX, NULL, NULL, 0); + if (futex_async((int32_t *) wait_shm_mmap, FUTEX_WAKE, + INT_MAX, NULL, NULL, 0) < 0) { + perror("futex_async"); + goto error; + } } else { uatomic_set((int32_t *) wait_shm_mmap, 0); } - ret = munmap(wait_shm_mmap, mmap_size); + ret = munmap(wait_shm_mmap, page_size); if (ret) { perror("Error unmapping wait shm"); goto error; @@ -698,12 +714,15 @@ static void set_ulimit(void) int main(int argc, const char **argv) { const char *home_dir; + char home_rundir[PATH_MAX]; + char *cmd = NULL; int ret, wait_shm_fd; struct sigaction act; mode_t old_umask = 0; const char *outputpath; const char **event_names; unsigned int nr_events; + long page_size; if (argc < 2) { printf("Usage:\n"); @@ -746,6 +765,15 @@ int main(int argc, const char **argv) return -1; } + page_size = sysconf(_SC_PAGE_SIZE); + if (page_size <= 0) { + if (!page_size) { + errno = EINVAL; + } + perror("Error in sysconf(_SC_PAGE_SIZE)"); + return -1; + } + if (geteuid() == 0) { ret = mkdir(LTTNG_RUNDIR, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); if (ret && errno != EEXIST) { @@ -753,7 +781,7 @@ int main(int argc, const char **argv) return -1; } wait_shm_fd = get_wait_shm(DEFAULT_GLOBAL_APPS_WAIT_SHM_PATH, - sysconf(_SC_PAGE_SIZE), 1); + page_size, 1); if (wait_shm_fd < 0) { perror("global wait shm error"); return -1; @@ -761,19 +789,29 @@ int main(int argc, const char **argv) strcpy(apps_sock_path, DEFAULT_GLOBAL_APPS_UNIX_SOCK); old_umask = umask(0); } else { + home_dir = (const char *) getenv("HOME"); + if (!home_dir) { + perror("getenv error"); + return -ENOENT; + } + + snprintf(home_rundir, PATH_MAX, + LTTNG_HOME_RUNDIR, home_dir); + + ret = mkdir(home_rundir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + if (ret && errno != EEXIST) { + perror("mkdir"); + return -1; + } + snprintf(local_apps_wait_shm_path, PATH_MAX, DEFAULT_HOME_APPS_WAIT_SHM_PATH, getuid()); wait_shm_fd = get_wait_shm(local_apps_wait_shm_path, - sysconf(_SC_PAGE_SIZE), 0); + page_size, 0); if (wait_shm_fd < 0) { perror("local wait shm error"); return -1; } - home_dir = (const char *) getenv("HOME"); - if (!home_dir) { - perror("getenv error"); - return -ENOENT; - } snprintf(apps_sock_path, PATH_MAX, DEFAULT_HOME_APPS_UNIX_SOCK, home_dir); } @@ -819,6 +857,7 @@ int main(int argc, const char **argv) pid_t ppid; uid_t uid; gid_t gid; + uint32_t bits_per_long; char name[16]; /* Process name */ } reg_msg; char bufname[17]; @@ -864,5 +903,22 @@ end: return -1; } + if (geteuid()) { + printf("Removing %s directory\n", home_rundir); + ret = asprintf(&cmd, "rm -rf %s", home_rundir); + if (ret < 0) { + printf("asprintf failed. Something is really wrong!\n"); + return -1; + } + + /* Remove lttng run directory */ + ret = system(cmd); + if (ret < 0) { + printf("Unable to clean %s\n", home_rundir); + return -1; + } + } + + return 0; }