Fix deadlock and only push to contq if it's not a coding blob
This commit is contained in:
committed by
Greg Fitzgerald
parent
00c8505d1e
commit
d1eaecde9a
@ -273,6 +273,7 @@ fn recv_window(
|
|||||||
//if we get different blocks at the same index
|
//if we get different blocks at the same index
|
||||||
//that is a network failure/attack
|
//that is a network failure/attack
|
||||||
trace!("window w: {} size: {}", w, p.meta.size);
|
trace!("window w: {} size: {}", w, p.meta.size);
|
||||||
|
drop(p);
|
||||||
{
|
{
|
||||||
let mut window = locked_window.write().unwrap();
|
let mut window = locked_window.write().unwrap();
|
||||||
if window[w].is_none() {
|
if window[w].is_none() {
|
||||||
@ -290,12 +291,15 @@ fn recv_window(
|
|||||||
if window[k].is_none() {
|
if window[k].is_none() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
let w_l1 = window[k].clone().unwrap();
|
let mut is_coding = false;
|
||||||
let w_l2 = w_l1.read().unwrap();
|
if let &Some(ref cblob) = &window[k] {
|
||||||
if (w_l2.get_flags().unwrap() & BLOB_FLAG_IS_CODING) != 0 {
|
if (cblob.read().expect("blob read lock for flags streamer::window").get_flags().unwrap() & BLOB_FLAG_IS_CODING) != 0 {
|
||||||
break;
|
is_coding = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if !is_coding {
|
||||||
contq.push_back(window[k].clone().expect("clone in fn recv_window"));
|
contq.push_back(window[k].clone().expect("clone in fn recv_window"));
|
||||||
|
}
|
||||||
window[k] = None;
|
window[k] = None;
|
||||||
*consumed += 1;
|
*consumed += 1;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user