Skip to content

Commit 5515b1c

Browse files
committed
fix: Regression where on_close is called more than once, close #146
1 parent 080ba04 commit 5515b1c

File tree

5 files changed

+20
-9
lines changed

5 files changed

+20
-9
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ target
33
todo.txt
44
/tests/reports
55
.project
6+
.cache
67

CHANGELOG.md

+9
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
<a name="v0.7.3"></a>
2+
### v0.7.3 (2017-06-07)
3+
4+
5+
#### Bug Fixes
6+
7+
* Issue with `on_close` called twice
8+
9+
110
<a name="v0.7.2"></a>
211
### v0.7.2 (2017-06-04)
312

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ license = "MIT"
77
name = "ws"
88
readme = "README.md"
99
repository = "https://github.com/housleyjk/ws-rs"
10-
version = "0.7.2"
10+
version = "0.7.1"
1111

1212
[dependencies]
1313
httparse = "1.0"

src/connection.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -597,8 +597,12 @@ impl<H> Connection<H>
597597
while let Some(len) = try!(self.buffer_in()) {
598598
try!(self.read_frames());
599599
if len == 0 {
600-
self.events.remove(Ready::readable());
601-
break;
600+
if self.events.is_writable() {
601+
self.events.remove(Ready::readable());
602+
} else {
603+
self.disconnect()
604+
}
605+
break
602606
}
603607
}
604608
Ok(())

src/io.rs

+3-6
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ use connection::Connection;
2424
use factory::Factory;
2525
use util::Slab;
2626
use super::Settings;
27-
use protocol::CloseCode;
28-
use handler::Handler as HandlerT;
2927

3028
const QUEUE: Token = Token(usize::MAX - 3);
3129
const TIMER: Token = Token(usize::MAX - 4);
@@ -470,8 +468,7 @@ impl<F> Handler<F>
470468
} else {
471469
trace!("WebSocket connection to token={:?} disconnected.", token);
472470
}
473-
let mut handler = self.connections.remove(token).unwrap().consume();
474-
handler.on_close(CloseCode::Abnormal, "");
471+
let handler = self.connections.remove(token).unwrap().consume();
475472
self.factory.connection_lost(handler);
476473
} else {
477474
self.schedule(poll, &self.connections[token]).or_else(|err| {
@@ -579,9 +576,9 @@ impl<F> Handler<F>
579576
self.connections[token].error(err)
580577
}
581578
}
582-
579+
583580
let conn_events = self.connections[token].events();
584-
581+
585582
if (events & conn_events).is_writable() {
586583
if let Err(err) = self.connections[token].write() {
587584
trace!("Encountered error while writing: {}", err);

0 commit comments

Comments
 (0)