pibd: check if segment not exists at request when selecting next required
This commit is contained in:
@@ -583,6 +583,16 @@ impl Desegmenter {
|
||||
}
|
||||
}
|
||||
|
||||
// Explicitly add segment identifier to request if not exists.
|
||||
let mut maybe_add_to_request = |seg_id: SegmentTypeIdentifier| {
|
||||
if return_vec.iter().any(|i| i == &seg_id) {
|
||||
if return_vec.len() >= max_elements {
|
||||
return_vec.pop();
|
||||
}
|
||||
return_vec.push(seg_id);
|
||||
}
|
||||
};
|
||||
|
||||
// Ensure we explicitly ask for the next output segment.
|
||||
if let Some(next_output_idx) = self.next_required_output_segment_index() {
|
||||
let seg_id = SegmentIdentifier {
|
||||
@@ -590,10 +600,8 @@ impl Desegmenter {
|
||||
idx: next_output_idx,
|
||||
};
|
||||
if !self.has_output_segment_with_id(seg_id) {
|
||||
if return_vec.len() >= max_elements {
|
||||
return_vec.pop();
|
||||
}
|
||||
return_vec.push(SegmentTypeIdentifier::new(SegmentType::Output, seg_id));
|
||||
let next_output_seg_id = SegmentTypeIdentifier::new(SegmentType::Output, seg_id);
|
||||
maybe_add_to_request(next_output_seg_id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -604,10 +612,8 @@ impl Desegmenter {
|
||||
idx: next_rp_idx,
|
||||
};
|
||||
if !self.has_rangeproof_segment_with_id(seg_id) {
|
||||
if return_vec.len() >= max_elements {
|
||||
return_vec.pop();
|
||||
}
|
||||
return_vec.push(SegmentTypeIdentifier::new(SegmentType::RangeProof, seg_id));
|
||||
let next_proof_seg_id = SegmentTypeIdentifier::new(SegmentType::RangeProof, seg_id);
|
||||
maybe_add_to_request(next_proof_seg_id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -619,14 +625,9 @@ impl Desegmenter {
|
||||
height: self.default_kernel_segment_height,
|
||||
idx: next_kernel_idx,
|
||||
};
|
||||
let next_kernel_seg_id = SegmentTypeIdentifier::new(SegmentType::Kernel, seg_id);
|
||||
if !self.has_kernel_segment_with_id(seg_id)
|
||||
&& !return_vec.iter().any(|x| x == &next_kernel_seg_id)
|
||||
{
|
||||
if return_vec.len() >= max_elements {
|
||||
return_vec.pop();
|
||||
}
|
||||
return_vec.push(next_kernel_seg_id);
|
||||
if !self.has_kernel_segment_with_id(seg_id) {
|
||||
let next_kernel_seg_id = SegmentTypeIdentifier::new(SegmentType::Kernel, seg_id);
|
||||
maybe_add_to_request(next_kernel_seg_id);
|
||||
}
|
||||
}
|
||||
if return_vec.is_empty() && self.bitmap_cache.is_some() {
|
||||
|
||||
Reference in New Issue
Block a user