X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=ustd%2Flowlevel.c;h=a10f9317c056abd0fb639728ad2addad7e0b5129;hb=e6eed717dcecf6f3d964e0ece5294afe9e51ad86;hp=4c179c5cbe1317b71b6724f276fcd920cdee4ac8;hpb=1d59f7ebe74e0bb11f5db359e543f8f05a2f8635;p=ust.git diff --git a/ustd/lowlevel.c b/ustd/lowlevel.c index 4c179c5..a10f931 100644 --- a/ustd/lowlevel.c +++ b/ustd/lowlevel.c @@ -15,6 +15,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include #include #include @@ -63,10 +64,12 @@ size_t subbuffer_data_size(void *subbuf) void finish_consuming_dead_subbuffer(struct buffer_info *buf) { + int result; + struct ust_buffer *ustbuf = buf->bufstruct_mem; - long write_offset = local_read(&ustbuf->offset); - long consumed_offset = atomic_long_read(&ustbuf->consumed); + long write_offset = uatomic_read(&ustbuf->offset); + long consumed_offset = uatomic_read(&ustbuf->consumed); long i_subbuf; @@ -95,7 +98,7 @@ void finish_consuming_dead_subbuffer(struct buffer_info *buf) void *tmp; /* commit_seq is the offset in the buffer of the end of the last sequential commit. * Bytes beyond this limit cannot be recovered. This is a free-running counter. */ - long commit_seq = local_read(&ustbuf->commit_seq[i_subbuf]); + long commit_seq = uatomic_read(&ustbuf->commit_seq[i_subbuf]); unsigned long valid_length = buf->subbuf_size; long n_subbufs_order = get_count_order(buf->n_subbufs); @@ -136,14 +139,22 @@ void finish_consuming_dead_subbuffer(struct buffer_info *buf) } - patient_write(buf->file_fd, buf->mem + i_subbuf * buf->subbuf_size, valid_length); + result = patient_write(buf->file_fd, buf->mem + i_subbuf * buf->subbuf_size, valid_length); + if(result == -1) { + ERR("Error writing to buffer file"); + return; + } /* pad with empty bytes */ pad_size = PAGE_ALIGN(valid_length)-valid_length; if(pad_size) { tmp = malloc(pad_size); memset(tmp, 0, pad_size); - patient_write(buf->file_fd, tmp, pad_size); + result = patient_write(buf->file_fd, tmp, pad_size); + if(result == -1) { + ERR("Error writing to buffer file"); + return; + } free(tmp); }