}
/* Iterate on subbuffers to recover. */
- for(i_subbuf=first_subbuf; ; i_subbuf++, i_subbuf %= buf->n_subbufs) {
+ for(i_subbuf = first_subbuf % buf->n_subbufs; ; i_subbuf++, i_subbuf %= buf->n_subbufs) {
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. */
}
/* Check if subbuf was fully written. This is from Mathieu's algorithm/paper. */
+ /* FIXME: not sure data_size = 0xffffffff when the buffer is not full. It might
+ * take the value of the header size initially */
if (((commit_seq - buf->subbuf_size) & commit_seq_mask)
- (USTD_BUFFER_TRUNC(consumed_offset, buf) >> n_subbufs_order) == 0
&& header->data_size != 0xffffffff && header->sb_size != 0xffffffff) {