From f921c78f991c899c741252949662cc2f589d8741 Mon Sep 17 00:00:00 2001 From: David Goulet Date: Tue, 18 Dec 2012 15:30:25 -0500 Subject: [PATCH] Fix: handle EINTR for every read() Signed-off-by: David Goulet --- src/bin/lttng-relayd/main.c | 4 +++- src/bin/lttng-sessiond/main.c | 12 ++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/bin/lttng-relayd/main.c b/src/bin/lttng-relayd/main.c index a3eef1488..47780e266 100644 --- a/src/bin/lttng-relayd/main.c +++ b/src/bin/lttng-relayd/main.c @@ -1818,7 +1818,9 @@ int relay_add_connection(int fd, struct lttng_poll_event *events, PERROR("Relay command zmalloc"); goto error; } - ret = read(fd, relay_connection, sizeof(struct relay_command)); + do { + ret = read(fd, relay_connection, sizeof(struct relay_command)); + } while (ret < 0 && errno == EINTR); if (ret < 0 || ret < sizeof(struct relay_command)) { PERROR("read relay cmd pipe"); goto error_read; diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c index 6e548f3c1..477a9413b 100644 --- a/src/bin/lttng-sessiond/main.c +++ b/src/bin/lttng-sessiond/main.c @@ -772,7 +772,13 @@ static void *thread_manage_kernel(void *data) /* Check for data on kernel pipe */ if (pollfd == kernel_poll_pipe[0] && (revents & LPOLLIN)) { - ret = read(kernel_poll_pipe[0], &tmp, 1); + do { + ret = read(kernel_poll_pipe[0], &tmp, 1); + } while (ret < 0 && errno == EINTR); + /* + * Ret value is useless here, if this pipe gets any actions an + * update is required anyway. + */ update_poll_flag = 1; continue; } else { @@ -1166,7 +1172,9 @@ static void *thread_manage_apps(void *data) goto error; } else if (revents & LPOLLIN) { /* Empty pipe */ - ret = read(apps_cmd_pipe[0], &ust_cmd, sizeof(ust_cmd)); + do { + ret = read(apps_cmd_pipe[0], &ust_cmd, sizeof(ust_cmd)); + } while (ret < 0 && errno == EINTR); if (ret < 0 || ret < sizeof(ust_cmd)) { PERROR("read apps cmd pipe"); goto error; -- 2.34.1