static void check_buffer(struct reader_thread_data *self) { size_t subbufs_consumed; lseek(self->produced_file, 0, SEEK_SET); if (read(self->produced_file, &self->produced, sizeof(self->produced)) < 0) { eprintf("Couldn't read from produced file for cpu %d, " "exiting: errcode = %d: %s\n", self->cpu, errno, strerror(errno)); exit(1); } subbufs_consumed = process_subbufs(self); if (subbufs_consumed) { if (subbufs_consumed == self->n_subbufs) eprintf("cpu %d buffer full. " "Consider using a larger buffer size.\n", self->cpu); if (subbufs_consumed > self->max_backlog) { self->max_backlog = subbufs_consumed; } self->consumed += subbufs_consumed; if (write(self->consumed_file, &subbufs_consumed, sizeof(subbufs_consumed)) < 0) { eprintf("Couldn't write to consumed file for cpu %d, " "exiting: errcode = %d: %s\n", self->cpu, errno, strerror(errno)); exit(1); } } }
/** * check_buffer - check for and read any available sub-buffers in a buffer */ static void check_buffer(unsigned cpu) { size_t subbufs_consumed; lseek(produced_file[cpu], 0, SEEK_SET); if (read(produced_file[cpu], &status[cpu].produced, sizeof(status[cpu].produced)) < 0) { printf("Couldn't read from consumed file for cpu %d, exiting: errcode = %d: %s\n", cpu, errno, strerror(errno)); exit(1); } subbufs_consumed = process_subbufs(cpu); if (subbufs_consumed) { if (subbufs_consumed == n_subbufs) fprintf(stderr, "cpu %d buffer full. Consider using a larger buffer size.\n", cpu); if (subbufs_consumed > status[cpu].max_backlog) status[cpu].max_backlog = subbufs_consumed; status[cpu].consumed += subbufs_consumed; if (write(consumed_file[cpu], &subbufs_consumed, sizeof(subbufs_consumed)) < 0) { printf("Couldn't write to consumed file for cpu %d, exiting: errcode = %d: %s\n", cpu, errno, strerror(errno)); exit(1); } } }