result = sscanf(received_msg, "%d %d", &buf->shmid, &buf->bufstruct_shmid);
if(result != 2) {
- ERR("unable to parse response to get_shmid");
+ ERR("unable to parse response to get_shmid (\"%s\")", received_msg);
return NULL;
}
free(received_msg);
}
free(tmp);
- asprintf(&tmp, "%s/%u_%lld/%s_0", trace_path, buf->pid, buf->pidunique, buf->name);
+ asprintf(&tmp, "%s/%u_%lld/%s", trace_path, buf->pid, buf->pidunique, buf->name);
result = fd = open(tmp, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 00600);
if(result == -1) {
PERROR("open");
return buf;
}
+int write_current_subbuffer(struct buffer_info *buf)
+{
+ int result;
+
+ void *subbuf_mem = buf->mem + (buf->consumed_old & (buf->n_subbufs * buf->subbuf_size-1));
+
+ size_t cur_sb_size = subbuffer_data_size(subbuf_mem);
+
+ result = patient_write(buf->file_fd, subbuf_mem, cur_sb_size);
+ if(result == -1) {
+ PERROR("write");
+ /* FIXME: maybe drop this trace */
+ return 0;
+ }
+
+ return 0;
+}
+
int consumer_loop(struct buffer_info *buf)
{
int result;
}
/* write data to file */
- result = patient_write(buf->file_fd, buf->mem + (buf->consumed_old & (buf->n_subbufs * buf->subbuf_size-1)), buf->subbuf_size);
- if(result == -1) {
- PERROR("write");
- /* FIXME: maybe drop this trace */
- }
+ write_current_subbuffer(buf);
+ /* FIXME: handle return value? */
/* put the subbuffer */
/* FIXME: we actually should unput the buffer before consuming... */