Fix: Use PERROR all across lttng-tools, never make it quiet
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 2 Mar 2012 19:01:42 +0000 (14:01 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 2 Mar 2012 19:01:42 +0000 (14:01 -0500)
We never want to hide these errors, even in quiet mode. For those
"errors" that are expected and part of the normal operation (e.g. send
consumer channel: Socket operation on non-socket), we will have to
handle the return values and errno explicitly in the code.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
src/bin/lttng/utils.c
src/common/compat/compat-epoll.c
src/common/consumer.c
src/common/error.h
src/common/runas.c
src/common/sessiond-comm/sessiond-comm.c
src/common/ust-consumer/ust-consumer.c

index 1f491db1b89e0095d33ce7ee603338f4f7f400c2..514bfe645a40363cb4cd6526b1c09c8e13d025b2 100644 (file)
@@ -16,6 +16,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
+#define _GNU_SOURCE
 #include <stdlib.h>
 #include <ctype.h>
 
index 77f5b922abcb7bc03c90ce8f574f5f4c94a9e6ed..008dba7028dff9d0756914d50c4a1baf7effdbe7 100644 (file)
@@ -15,6 +15,7 @@
  * Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 
+#define _GNU_SOURCE
 #include <fcntl.h>
 #include <limits.h>
 #include <stdlib.h>
@@ -49,7 +50,7 @@ int compat_epoll_create(struct lttng_poll_event *events, int size, int flags)
        ret = epoll_create1(flags);
        if (ret < 0) {
                /* At this point, every error is fatal */
-               perror("epoll_create1");
+               PERROR("epoll_create1");
                goto error;
        }
 
@@ -58,7 +59,7 @@ int compat_epoll_create(struct lttng_poll_event *events, int size, int flags)
        /* This *must* be freed by using lttng_poll_free() */
        events->events = zmalloc(size * sizeof(struct epoll_event));
        if (events->events == NULL) {
-               perror("zmalloc epoll set");
+               PERROR("zmalloc epoll set");
                goto error_close;
        }
 
@@ -68,7 +69,10 @@ int compat_epoll_create(struct lttng_poll_event *events, int size, int flags)
        return 0;
 
 error_close:
-       close(events->epfd);
+       ret = close(events->epfd);
+       if (ret) {
+               PERROR("close");
+       }
 error:
        return -1;
 }
@@ -97,11 +101,11 @@ int compat_epoll_add(struct lttng_poll_event *events, int fd, uint32_t req_event
                        goto end;
                case ENOSPC:
                case EPERM:
-                       /* Print perror and goto end not failing. Show must go on. */
-                       perror("epoll_ctl ADD");
+                       /* Print PERROR and goto end not failing. Show must go on. */
+                       PERROR("epoll_ctl ADD");
                        goto end;
                default:
-                       perror("epoll_ctl ADD fatal");
+                       PERROR("epoll_ctl ADD fatal");
                        goto error;
                }
        }
@@ -112,7 +116,7 @@ int compat_epoll_add(struct lttng_poll_event *events, int fd, uint32_t req_event
                new_size = 2 * events->events_size;
                ptr = realloc(events->events, new_size * sizeof(struct epoll_event));
                if (ptr == NULL) {
-                       perror("realloc epoll add");
+                       PERROR("realloc epoll add");
                        goto error;
                }
                events->events = ptr;
@@ -142,14 +146,14 @@ int compat_epoll_del(struct lttng_poll_event *events, int fd)
                switch (errno) {
                case ENOENT:
                case EPERM:
-                       /* Print perror and goto end not failing. Show must go on. */
-                       perror("epoll_ctl DEL");
+                       /* Print PERROR and goto end not failing. Show must go on. */
+                       PERROR("epoll_ctl DEL");
                        goto end;
                default:
-                       perror("epoll_ctl DEL fatal");
+                       PERROR("epoll_ctl DEL fatal");
                        goto error;
                }
-               perror("epoll_ctl del");
+               PERROR("epoll_ctl del");
                goto error;
        }
 
@@ -180,7 +184,7 @@ int compat_epoll_wait(struct lttng_poll_event *events, int timeout)
        } while (ret == -1 && errno == EINTR);
        if (ret < 0) {
                /* At this point, every error is fatal */
-               perror("epoll_wait");
+               PERROR("epoll_wait");
                goto error;
        }
 
@@ -207,7 +211,7 @@ void compat_epoll_set_max_size(void)
 
        ret = read(fd, buf, sizeof(buf));
        if (ret < 0) {
-               perror("read set max size");
+               PERROR("read set max size");
                goto error;
        }
 
@@ -220,5 +224,8 @@ void compat_epoll_set_max_size(void)
        DBG("epoll set max size is %d", poll_max_size);
 
 error:
-       close(fd);
+       ret = close(fd);
+       if (ret) {
+               PERROR("close");
+       }
 }
index 026d9f0f83b56731b9bd04303b9af69720aee1df..9c54b84cf963bb5f0ae853248023216f0d7e1cdb 100644 (file)
@@ -174,13 +174,22 @@ void consumer_del_stream(struct lttng_consumer_stream *stream)
                goto end;
        }
        if (stream->out_fd >= 0) {
-               close(stream->out_fd);
+               ret = close(stream->out_fd);
+               if (ret) {
+                       PERROR("close");
+               }
        }
        if (stream->wait_fd >= 0 && !stream->wait_fd_is_copy) {
-               close(stream->wait_fd);
+               ret = close(stream->wait_fd);
+               if (ret) {
+                       PERROR("close");
+               }
        }
        if (stream->shm_fd >= 0 && stream->wait_fd != stream->shm_fd) {
-               close(stream->shm_fd);
+               ret = close(stream->shm_fd);
+               if (ret) {
+                       PERROR("close");
+               }
        }
        if (!--stream->chan->refcount)
                free_chan = stream->chan;
@@ -361,10 +370,16 @@ void consumer_del_channel(struct lttng_consumer_channel *channel)
                }
        }
        if (channel->wait_fd >= 0 && !channel->wait_fd_is_copy) {
-               close(channel->wait_fd);
+               ret = close(channel->wait_fd);
+               if (ret) {
+                       PERROR("close");
+               }
        }
        if (channel->shm_fd >= 0 && channel->wait_fd != channel->shm_fd) {
-               close(channel->shm_fd);
+               ret = close(channel->shm_fd);
+               if (ret) {
+                       PERROR("close");
+               }
        }
        free(channel);
 end:
@@ -699,14 +714,18 @@ error_thread_pipe:
                int err;
 
                err = close(ctx->consumer_should_quit[i]);
-               assert(!err);
+               if (err) {
+                       PERROR("close");
+               }
        }
 error_quit_pipe:
        for (i = 0; i < 2; i++) {
                int err;
 
                err = close(ctx->consumer_poll_pipe[i]);
-               assert(!err);
+               if (err) {
+                       PERROR("close");
+               }
        }
 error_poll_pipe:
        free(ctx);
@@ -719,13 +738,36 @@ error:
  */
 void lttng_consumer_destroy(struct lttng_consumer_local_data *ctx)
 {
-       close(ctx->consumer_error_socket);
-       close(ctx->consumer_thread_pipe[0]);
-       close(ctx->consumer_thread_pipe[1]);
-       close(ctx->consumer_poll_pipe[0]);
-       close(ctx->consumer_poll_pipe[1]);
-       close(ctx->consumer_should_quit[0]);
-       close(ctx->consumer_should_quit[1]);
+       int ret;
+
+       ret = close(ctx->consumer_error_socket);
+       if (ret) {
+               PERROR("close");
+       }
+       ret = close(ctx->consumer_thread_pipe[0]);
+       if (ret) {
+               PERROR("close");
+       }
+       ret = close(ctx->consumer_thread_pipe[1]);
+       if (ret) {
+               PERROR("close");
+       }
+       ret = close(ctx->consumer_poll_pipe[0]);
+       if (ret) {
+               PERROR("close");
+       }
+       ret = close(ctx->consumer_poll_pipe[1]);
+       if (ret) {
+               PERROR("close");
+       }
+       ret = close(ctx->consumer_should_quit[0]);
+       if (ret) {
+               PERROR("close");
+       }
+       ret = close(ctx->consumer_should_quit[1]);
+       if (ret) {
+               PERROR("close");
+       }
        unlink(ctx->consumer_command_sock_path);
        free(ctx);
 }
index 822dccfedfee1e5ded65db0c716522c9bd814ec8..93c947c0d92ce79cf88b6aa7952762b2e35ff85f 100644 (file)
 #include <stdio.h>
 #include <string.h>
 
+#ifndef _GNU_SOURCE
+#error "lttng-tools error.h needs _GNU_SOURCE"
+#endif
+
 /* Stringify the expansion of a define */
 #define XSTR(d) STR(d)
 #define STR(s) #s
@@ -40,21 +44,22 @@ extern int opt_verbose;
 /*
  * Macro for printing message depending on command line option and verbosity.
  */
-#define __lttng_print(type, fmt, args...)                                 \
-       do {                                                                  \
-               if (opt_quiet == 0) {                                             \
-                       if (type == PRINT_MSG) {                                      \
-                               fprintf(stdout, fmt, ## args);                            \
-                       } else if (((type & PRINT_DBG) && opt_verbose == 1) ||        \
-                                       ((type & (PRINT_DBG | PRINT_DBG2)) &&                 \
-                                               opt_verbose == 2) ||                              \
-                                       ((type & (PRINT_DBG | PRINT_DBG2 | PRINT_DBG3)) &&    \
-                                               opt_verbose == 3)) {                              \
-                               fprintf(stderr, fmt, ## args);                            \
-                       } else if (type & (PRINT_ERR | PRINT_WARN | PRINT_BUG)) {     \
-                               fprintf(stderr, fmt, ## args);                            \
-                       }                                                             \
-               }                                                                 \
+#define __lttng_print(type, fmt, args...)                                      \
+       do {                                                                    \
+               if (opt_quiet == 0 && type == PRINT_MSG) {                      \
+                       fprintf(stdout, fmt, ## args);                          \
+               } else if (opt_quiet == 0 &&                                    \
+                               (((type & PRINT_DBG) && opt_verbose == 1) ||    \
+                               ((type & (PRINT_DBG | PRINT_DBG2)) &&           \
+                                       opt_verbose == 2) ||                    \
+                               ((type & (PRINT_DBG | PRINT_DBG2 | PRINT_DBG3)) &&      \
+                                       opt_verbose == 3))) {                   \
+                       fprintf(stderr, fmt, ## args);                          \
+               } else if (opt_quiet == 0 && (type & (PRINT_WARN))) {           \
+                       fprintf(stderr, fmt, ## args);                          \
+               } else if (type & (PRINT_ERR | PRINT_BUG)) {                    \
+                       fprintf(stderr, fmt, ## args);                          \
+               }                                                               \
        } while (0);
 
 #define MSG(fmt, args...) \
@@ -79,7 +84,7 @@ extern int opt_verbose;
                " [in %s() at " __FILE__ ":" XSTR(__LINE__) "]\n", ## args, __func__)
 
 #define PERROR(call, args...) \
-    do { \
+       do { \
                char *buf; \
                char tmp[200]; \
                buf = strerror_r(errno, tmp, sizeof(tmp)); \
index 745a6d0d13643d2333ee1bfe5c8b3e4c8fe4fb3b..60e02a2bf85a4e22ff363d2a6ede3cfc1a0fd277 100644 (file)
@@ -154,14 +154,14 @@ int child_run_as(void *_data)
        if (data->gid != getegid()) {
                ret = setegid(data->gid);
                if (ret < 0) {
-                       perror("setegid");
+                       PERROR("setegid");
                        return EXIT_FAILURE;
                }
        }
        if (data->uid != geteuid()) {
                ret = seteuid(data->uid);
                if (ret < 0) {
-                       perror("seteuid");
+                       PERROR("seteuid");
                        return EXIT_FAILURE;
                }
        }
@@ -177,7 +177,7 @@ int child_run_as(void *_data)
                writelen = write(data->retval_pipe, &sendret.c[index],
                                writeleft);
                if (writelen < 0) {
-                       perror("write");
+                       PERROR("write");
                        return EXIT_FAILURE;
                }
                writeleft -= writelen;
@@ -214,7 +214,7 @@ int run_as(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid)
 
        ret = pipe(retval_pipe);
        if (ret < 0) {
-               perror("pipe");
+               PERROR("pipe");
                retval.i = ret;
                goto end;
        }
@@ -228,7 +228,7 @@ int run_as(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid)
                MAP_PRIVATE | MAP_GROWSDOWN | MAP_ANONYMOUS | MAP_STACK,
                -1, 0);
        if (child_stack == MAP_FAILED) {
-               perror("mmap");
+               PERROR("mmap");
                retval.i = -ENOMEM;
                goto close_pipe;
        }
@@ -240,7 +240,7 @@ int run_as(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid)
                CLONE_FILES | SIGCHLD,
                &run_as_data, NULL);
        if (pid < 0) {
-               perror("clone");
+               PERROR("clone");
                retval.i = pid;
                goto unmap_stack;
        }
@@ -250,7 +250,7 @@ int run_as(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid)
        do {
                readlen = read(retval_pipe[0], &retval.c[index], readleft);
                if (readlen < 0) {
-                       perror("read");
+                       PERROR("read");
                        ret = -1;
                        break;
                }
@@ -264,18 +264,24 @@ int run_as(int (*cmd)(void *data), void *data, uid_t uid, gid_t gid)
         */
        pid = waitpid(pid, &status, 0);
        if (pid < 0 || !WIFEXITED(status) || WEXITSTATUS(status) != 0) {
-               perror("wait");
+               PERROR("wait");
                retval.i = -1;
        }
 unmap_stack:
        ret = munmap(child_stack, RUNAS_CHILD_STACK_SIZE);
        if (ret < 0) {
-               perror("munmap");
+               PERROR("munmap");
                retval.i = ret;
        }
 close_pipe:
-       close(retval_pipe[0]);
-       close(retval_pipe[1]);
+       ret = close(retval_pipe[0]);
+       if (ret) {
+               PERROR("close");
+       }
+       ret = close(retval_pipe[1]);
+       if (ret) {
+               PERROR("close");
+       }
 end:
        return retval.i;
 }
index 0c29003a6267a382b204a6f277a9d0a1468ad182..8a5ff1d3f10520efb26bef784dc7847fd7fba033 100644 (file)
@@ -29,6 +29,7 @@
 #include <errno.h>
 
 #include <common/defaults.h>
+#include <common/error.h>
 
 #include "sessiond-comm.h"
 
@@ -141,12 +142,11 @@ const char *lttcomm_get_readable_code(enum lttcomm_return_code code)
 int lttcomm_connect_unix_sock(const char *pathname)
 {
        struct sockaddr_un sun;
-       int fd;
-       int ret;
+       int fd, ret, closeret;
 
        fd = socket(PF_UNIX, SOCK_STREAM, 0);
        if (fd < 0) {
-               perror("socket");
+               PERROR("socket");
                ret = fd;
                goto error;
        }
@@ -168,7 +168,10 @@ int lttcomm_connect_unix_sock(const char *pathname)
        return fd;
 
 error_connect:
-       close(fd);
+       closeret = close(fd);
+       if (closeret) {
+               PERROR("close");
+       }
 error:
        return ret;
 }
@@ -186,7 +189,7 @@ int lttcomm_accept_unix_sock(int sock)
        /* Blocking call */
        new_fd = accept(sock, (struct sockaddr *) &sun, &len);
        if (new_fd < 0) {
-               perror("accept");
+               PERROR("accept");
        }
 
        return new_fd;
@@ -204,7 +207,7 @@ int lttcomm_create_unix_sock(const char *pathname)
 
        /* Create server socket */
        if ((fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) {
-               perror("socket");
+               PERROR("socket");
                goto error;
        }
 
@@ -217,7 +220,7 @@ int lttcomm_create_unix_sock(const char *pathname)
        (void) unlink(pathname);
        ret = bind(fd, (struct sockaddr *) &sun, sizeof(sun));
        if (ret < 0) {
-               perror("bind");
+               PERROR("bind");
                goto error;
        }
 
@@ -236,7 +239,7 @@ int lttcomm_listen_unix_sock(int sock)
 
        ret = listen(sock, LTTNG_SESSIOND_COMM_MAX_LISTEN);
        if (ret < 0) {
-               perror("listen");
+               PERROR("listen");
        }
 
        return ret;
@@ -263,7 +266,7 @@ ssize_t lttcomm_recv_unix_sock(int sock, void *buf, size_t len)
 
        ret = recvmsg(sock, &msg, MSG_WAITALL);
        if (ret < 0) {
-               perror("recvmsg");
+               PERROR("recvmsg");
        }
 
        return ret;
@@ -289,7 +292,7 @@ ssize_t lttcomm_send_unix_sock(int sock, void *buf, size_t len)
 
        ret = sendmsg(sock, &msg, 0);
        if (ret < 0) {
-               perror("sendmsg");
+               PERROR("sendmsg");
        }
 
        return ret;
@@ -300,15 +303,18 @@ ssize_t lttcomm_send_unix_sock(int sock, void *buf, size_t len)
  */
 int lttcomm_close_unix_sock(int sock)
 {
-       int ret;
+       int ret, closeret;
 
        /* Shutdown receptions and transmissions */
        ret = shutdown(sock, SHUT_RDWR);
        if (ret < 0) {
-               perror("shutdown");
+               PERROR("shutdown");
        }
 
-       close(sock);
+       closeret = close(sock);
+       if (closeret) {
+               PERROR("close");
+       }
 
        return ret;
 }
@@ -351,7 +357,7 @@ ssize_t lttcomm_send_fds_unix_sock(int sock, int *fds, size_t nb_fd)
 
        ret = sendmsg(sock, &msg, 0);
        if (ret < 0) {
-               perror("sendmsg");
+               PERROR("sendmsg");
        }
        return ret;
 }
@@ -386,7 +392,7 @@ ssize_t lttcomm_recv_fds_unix_sock(int sock, int *fds, size_t nb_fd)
 
        ret = recvmsg(sock, &msg, 0);
        if (ret < 0) {
-               perror("recvmsg fds");
+               PERROR("recvmsg fds");
                goto end;
        }
        if (ret != 1) {
@@ -460,7 +466,7 @@ ssize_t lttcomm_send_creds_unix_sock(int sock, void *buf, size_t len)
 
        ret = sendmsg(sock, &msg, 0);
        if (ret < 0) {
-               perror("sendmsg");
+               PERROR("sendmsg");
        }
 
        return ret;
@@ -500,7 +506,7 @@ ssize_t lttcomm_recv_creds_unix_sock(int sock, void *buf, size_t len,
 
        ret = recvmsg(sock, &msg, 0);
        if (ret < 0) {
-               perror("recvmsg fds");
+               PERROR("recvmsg fds");
                goto end;
        }
 
@@ -547,7 +553,7 @@ int lttcomm_setsockopt_creds_unix_sock(int sock)
        /* Set socket for credentials retrieval */
        ret = setsockopt(sock, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on));
        if (ret < 0) {
-               perror("setsockopt creds unix sock");
+               PERROR("setsockopt creds unix sock");
        }
 
        return ret;
index 04c6157e532d84e9cebe3c341d764a2647f0aeb2..20d0405a3b40e8d828c883dd3b57606583e2d770 100644 (file)
@@ -58,7 +58,7 @@ ssize_t lttng_ustconsumer_on_read_subbuffer_mmap(
                stream->buf, &mmap_offset);
        if (ret != 0) {
                errno = -ret;
-               perror("ustctl_get_mmap_read_offset");
+               PERROR("ustctl_get_mmap_read_offset");
                goto end;
        }
        while (len > 0) {
@@ -67,7 +67,7 @@ ssize_t lttng_ustconsumer_on_read_subbuffer_mmap(
                        len = 0;
                } else if (ret < 0) {
                        errno = -ret;
-                       perror("Error in file write");
+                       PERROR("Error in file write");
                        goto end;
                }
                /* This won't block, but will start writeout asynchronously */
@@ -109,7 +109,7 @@ int lttng_ustconsumer_take_snapshot(struct lttng_consumer_local_data *ctx,
        ret = ustctl_snapshot(stream->chan->handle, stream->buf);
        if (ret != 0) {
                errno = -ret;
-               perror("Getting sub-buffer snapshot.");
+               PERROR("Getting sub-buffer snapshot.");
        }
 
        return ret;
@@ -131,7 +131,7 @@ int lttng_ustconsumer_get_produced_snapshot(
                        stream->buf, pos);
        if (ret != 0) {
                errno = -ret;
-               perror("kernctl_snapshot_get_produced");
+               PERROR("kernctl_snapshot_get_produced");
        }
 
        return ret;
@@ -260,7 +260,7 @@ end:
        /* signal the poll thread */
        ret = write(ctx->consumer_poll_pipe[1], "4", 1);
        if (ret < 0) {
-               perror("write consumer poll");
+               PERROR("write consumer poll");
        }
 end_nosignal:
        return 0;
@@ -400,7 +400,7 @@ int lttng_ustconsumer_on_recv_stream(struct lttng_consumer_stream *stream)
                                stream->uid, stream->gid);
                if (ret < 0) {
                        ERR("Opening %s", stream->path_name);
-                       perror("open");
+                       PERROR("open");
                        goto error;
                }
                stream->out_fd = ret;
This page took 0.035928 seconds and 4 git commands to generate.