Skip to content

Commit f16b012

Browse files
committed
[git-packetline] YES, finally, the first green test
1 parent e300f9f commit f16b012

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

git-packetline/src/read/sidebands/async_io.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ enum State<'a, T> {
5757
},
5858
ReadLine {
5959
read_line: Pin<Box<dyn Future<Output = ReadLineResult<'a>> + 'a>>,
60-
parent_inactive: *mut StreamingPeekableIter<T>,
60+
parent_inactive: Option<*mut StreamingPeekableIter<T>>,
6161
},
6262
}
6363

@@ -138,18 +138,25 @@ where
138138
let (ofs, cap) = loop {
139139
match this.state {
140140
State::Idle { ref mut parent } => {
141-
let parent = parent.take().unwrap();
141+
let parent = parent.take().expect("parent to be present here");
142142
let inactive = parent as *mut _;
143143
this.state = State::ReadLine {
144144
read_line: parent.read_line().boxed(),
145-
parent_inactive: inactive,
145+
parent_inactive: Some(inactive),
146146
}
147147
}
148148
State::ReadLine {
149149
ref mut read_line,
150-
parent_inactive: _,
150+
ref mut parent_inactive,
151151
} => {
152-
let line = match ready!(read_line.poll(cx)) {
152+
let line = ready!(read_line.poll(cx));
153+
154+
let parent = parent_inactive.take().expect("parent pointer always set");
155+
#[allow(unsafe_code)]
156+
let parent = unsafe { &mut *parent };
157+
this.state = State::Idle { parent: Some(parent) };
158+
159+
let line = match line {
153160
Some(line) => line?.map_err(|err| io::Error::new(io::ErrorKind::Other, err))?,
154161
None => break (0, 0),
155162
};
@@ -191,8 +198,8 @@ where
191198
}
192199
}
193200
let range = self.pos..self.cap;
194-
match self.get_mut().state {
195-
State::Idle { ref parent } => Poll::Ready(Ok(&parent.as_ref().unwrap().buf[range])),
201+
match &self.get_mut().state {
202+
State::Idle { parent } => Poll::Ready(Ok(&parent.as_ref().expect("parent always available").buf[range])),
196203
State::ReadLine { .. } => unreachable!("at least in theory"),
197204
}
198205
}

0 commit comments

Comments
 (0)