Skip to content

Commit ad6719e

Browse files
committed
core::rt: Just a small fix to TcpStream
1 parent a134503 commit ad6719e

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

src/libcore/rt/io/net/tcp.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,4 +171,30 @@ mod test {
171171
}
172172
}
173173
}
174+
175+
#[test] #[ignore]
176+
fn multiple_connect_serial() {
177+
do run_in_newsched_task {
178+
let addr = next_test_ip4();
179+
let max = 100;
180+
181+
do spawntask_immediately {
182+
let mut listener = TcpListener::bind(addr);
183+
for max.times {
184+
let mut stream = listener.accept();
185+
let mut buf = [0];
186+
stream.read(buf);
187+
assert!(buf[0] == 99);
188+
}
189+
}
190+
191+
do spawntask_immediately {
192+
for max.times {
193+
let mut stream = TcpStream::connect(addr);
194+
stream.write([99]);
195+
}
196+
}
197+
}
198+
}
199+
174200
}

src/libcore/rt/uv/net.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,9 +239,10 @@ pub impl TcpWatcher {
239239
extern fn connection_cb(handle: *uvll::uv_stream_t, status: c_int) {
240240
rtdebug!("connection_cb");
241241
let mut stream_watcher: StreamWatcher = NativeHandle::from_native_handle(handle);
242-
let cb = stream_watcher.get_watcher_data().connect_cb.swap_unwrap();
243-
let status = status_to_maybe_uv_error(stream_watcher.native_handle(), status);
244-
cb(stream_watcher, status);
242+
let data = stream_watcher.get_watcher_data();
243+
let cb = data.connect_cb.get_ref();
244+
let status = status_to_maybe_uv_error(handle, status);
245+
(*cb)(stream_watcher, status);
245246
}
246247
}
247248

0 commit comments

Comments
 (0)