X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=ust-consumerd%2Fust-consumerd.c;h=0761253183eef1b5509a201a63e46611456f1b68;hb=HEAD;hp=fae4efafa87f06e02c80ef09080a0b2e8afabaf0;hpb=9dc7b7ff797a5cbb1e9ffd59e053a04562f306c4;p=ust.git diff --git a/ust-consumerd/ust-consumerd.c b/ust-consumerd/ust-consumerd.c index fae4efa..0761253 100644 --- a/ust-consumerd/ust-consumerd.c +++ b/ust-consumerd/ust-consumerd.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -33,6 +34,7 @@ #include #include "ust/ustconsumer.h" +#include "../libustconsumer/lowlevel.h" #include "usterr.h" char *sock_path=NULL; @@ -144,7 +146,7 @@ int on_read_partial_subbuffer(struct ustconsumer_callbacks *data, struct buffer_ result = patient_write(buf_local->file_fd, buf->mem + subbuf_index * buf->subbuf_size, valid_length); if(result == -1) { ERR("Error writing to buffer file"); - return; + return result; } /* pad with empty bytes */ @@ -154,11 +156,11 @@ int on_read_partial_subbuffer(struct ustconsumer_callbacks *data, struct buffer_ result = patient_write(buf_local->file_fd, tmp, pad_size); if(result == -1) { ERR("Error writing to buffer file"); - return; + return result; } free(tmp); } - + return result; } int on_open_buffer(struct ustconsumer_callbacks *data, struct buffer_info *buf) @@ -191,8 +193,8 @@ int on_open_buffer(struct ustconsumer_callbacks *data, struct buffer_info *buf) trace_path = USTCONSUMER_DEFAULT_TRACE_PATH; } - if (asprintf(&tmp, "%s/%u_%lld", trace_path, buf->pid, buf->pidunique) < 0) { - ERR("on_open_buffer : asprintf failed (%s/%u_%lld)", + if (asprintf(&tmp, "%s/%u_%" PRId64 "", trace_path, buf->pid, buf->pidunique) < 0) { + ERR("on_open_buffer : asprintf failed (%s/%u_%" PRId64 ")", trace_path, buf->pid, buf->pidunique); return 1; } @@ -204,12 +206,16 @@ int on_open_buffer(struct ustconsumer_callbacks *data, struct buffer_info *buf) } free(tmp); - if (asprintf(&tmp, "%s/%u_%lld/%s", trace_path, buf->pid, buf->pidunique, buf->name) < 0) { - ERR("on_open_buffer : asprintf failed (%s/%u_%lld/%s)", + if (asprintf(&tmp, "%s/%u_%" PRId64 "/%s", trace_path, buf->pid, buf->pidunique, buf->name) < 0) { + ERR("on_open_buffer : asprintf failed (%s/%u_%" PRId64 "/%s)", trace_path, buf->pid, buf->pidunique, buf->name); return 1; } +again: result = fd = open(tmp, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 00600); + if (result == -1 && errno == EINTR) + goto again; + if(result == -1) { PERROR("open"); ERR("failed opening trace file %s", tmp); @@ -224,7 +230,12 @@ int on_open_buffer(struct ustconsumer_callbacks *data, struct buffer_info *buf) int on_close_buffer(struct ustconsumer_callbacks *data, struct buffer_info *buf) { struct buffer_info_local *buf_local = buf->user_data; - int result = close(buf_local->file_fd); + int result; + +again: + result = close(buf_local->file_fd); + if (result == -1 && errno == EINTR) + goto again; free(buf_local); if(result == -1) { PERROR("close"); @@ -234,7 +245,7 @@ int on_close_buffer(struct ustconsumer_callbacks *data, struct buffer_info *buf) int on_put_error(struct ustconsumer_callbacks *data, struct buffer_info *buf) { - unwrite_last_subbuffer(buf); + return unwrite_last_subbuffer(buf); } struct ustconsumer_callbacks *new_callbacks()