projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix: write EINTR handling
[lttng-tools.git]
/
src
/
common
/
kernel-consumer
/
kernel-consumer.c
diff --git
a/src/common/kernel-consumer/kernel-consumer.c
b/src/common/kernel-consumer/kernel-consumer.c
index 8ed279f44e16db7e73a14d8947c9e87b143f6946..00bb7f7212cac7f0ccf4f4a6c91ef80dbb4b58ef 100644
(file)
--- a/
src/common/kernel-consumer/kernel-consumer.c
+++ b/
src/common/kernel-consumer/kernel-consumer.c
@@
-101,12
+101,12
@@
ssize_t lttng_kconsumer_on_read_subbuffer_mmap(
do {
ret = write(outfd, (void *) &metadata_id,
sizeof(stream->relayd_stream_id));
do {
ret = write(outfd, (void *) &metadata_id,
sizeof(stream->relayd_stream_id));
- if (ret < 0) {
- PERROR("write metadata stream id");
-
written = ret
;
-
goto end
;
- }
- }
while (errno == EINTR);
+ } while (ret < 0 && errno == EINTR);
+ if (ret < 0) {
+
PERROR("write metadata stream id")
;
+
written = ret
;
+ goto end;
+ }
DBG("Metadata stream id %zu written before data",
stream->relayd_stream_id);
/*
DBG("Metadata stream id %zu written before data",
stream->relayd_stream_id);
/*
@@
-120,18
+120,15
@@
ssize_t lttng_kconsumer_on_read_subbuffer_mmap(
}
while (len > 0) {
}
while (len > 0) {
- ret = write(outfd, stream->mmap_base + mmap_offset, len);
+ do {
+ ret = write(outfd, stream->mmap_base + mmap_offset, len);
+ } while (ret < 0 && errno == EINTR);
if (ret < 0) {
if (ret < 0) {
- if (errno == EINTR) {
- /* restart the interrupted system call */
- continue;
- } else {
- perror("Error in file write");
- if (written == 0) {
- written = ret;
- }
- goto end;
+ perror("Error in file write");
+ if (written == 0) {
+ written = ret;
}
}
+ goto end;
} else if (ret > len) {
perror("Error in file write");
written += ret;
} else if (ret > len) {
perror("Error in file write");
written += ret;
@@
-200,17
+197,17
@@
ssize_t lttng_kconsumer_on_read_subbuffer_splice(
*/
pthread_mutex_lock(&relayd->ctrl_sock_mutex);
*/
pthread_mutex_lock(&relayd->ctrl_sock_mutex);
+ metadata_id = htobe64(stream->relayd_stream_id);
do {
do {
- metadata_id = htobe64(stream->relayd_stream_id);
ret = write(ctx->consumer_thread_pipe[1],
(void *) &metadata_id,
sizeof(stream->relayd_stream_id));
ret = write(ctx->consumer_thread_pipe[1],
(void *) &metadata_id,
sizeof(stream->relayd_stream_id));
- if (ret < 0) {
- PERROR("write metadata stream id");
-
written = ret
;
-
goto end
;
- }
- }
while (errno == EINTR);
+ } while (ret < 0 && errno == EINTR);
+ if (ret < 0) {
+
PERROR("write metadata stream id")
;
+
written = ret
;
+ goto end;
+ }
DBG("Metadata stream id %zu written before data",
stream->relayd_stream_id);
}
DBG("Metadata stream id %zu written before data",
stream->relayd_stream_id);
}
@@
-581,7
+578,7
@@
end:
*/
do {
ret = write(ctx->consumer_poll_pipe[1], "", 1);
*/
do {
ret = write(ctx->consumer_poll_pipe[1], "", 1);
- } while (ret
== -1UL
&& errno == EINTR);
+ } while (ret
< 0
&& errno == EINTR);
end_nosignal:
return 0;
}
end_nosignal:
return 0;
}
This page took
0.026084 seconds
and
5
git commands to generate.