Skip to content

Commit 44f671c

Browse files
committed
fix Interest operation
1 parent 3621cfd commit 44f671c

File tree

4 files changed

+40
-16
lines changed

4 files changed

+40
-16
lines changed

src/proxy/tcp_server.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -257,19 +257,25 @@ impl Connection {
257257
_ => {
258258
let mut changed = false;
259259
if !self.send_buffer.is_empty() && !self.client_readiness.is_writable() {
260-
self.client_readiness.add(Interest::WRITABLE);
260+
self.client_readiness |= Interest::WRITABLE;
261261
changed = true;
262262
}
263263
if self.send_buffer.is_empty() && self.client_readiness.is_writable() {
264-
self.client_readiness.remove(Interest::WRITABLE);
264+
self.client_readiness = self
265+
.client_readiness
266+
.remove(Interest::WRITABLE)
267+
.unwrap_or(Interest::READABLE);
265268
changed = true;
266269
}
267270
if self.server_conn.writable() && !self.client_readiness.is_readable() {
268-
self.client_readiness.add(Interest::READABLE);
271+
self.client_readiness |= Interest::READABLE;
269272
changed = true;
270273
}
271274
if !self.server_conn.writable() && self.client_readiness.is_readable() {
272-
self.client_readiness.remove(Interest::READABLE);
275+
self.client_readiness = self
276+
.client_readiness
277+
.remove(Interest::READABLE)
278+
.unwrap_or(Interest::WRITABLE);
273279
changed = true;
274280
}
275281

src/server/tcp_backend.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,22 +103,28 @@ impl Backend for TcpBackend {
103103
_ => {
104104
let mut changed = false;
105105
if !self.send_buffer.is_empty() && !self.readiness.is_writable() {
106-
self.readiness.add(Interest::WRITABLE);
106+
self.readiness |= Interest::WRITABLE;
107107
changed = true;
108108
log::debug!("connection:{} add writable to tcp target", self.index);
109109
}
110110
if self.send_buffer.is_empty() && self.readiness.is_writable() {
111-
self.readiness.remove(Interest::WRITABLE);
111+
self.readiness = self
112+
.readiness
113+
.remove(Interest::WRITABLE)
114+
.unwrap_or(Interest::READABLE);
112115
changed = true;
113116
log::debug!("connection:{} remove writable from tcp target", self.index);
114117
}
115118
if readable && !self.readiness.is_readable() {
116-
self.readiness.add(Interest::READABLE);
119+
self.readiness |= Interest::READABLE;
117120
log::debug!("connection:{} add readable to tcp target", self.index);
118121
changed = true;
119122
}
120123
if !readable && self.readiness.is_readable() {
121-
self.readiness.remove(Interest::READABLE);
124+
self.readiness = self
125+
.readiness
126+
.remove(Interest::READABLE)
127+
.unwrap_or(Interest::WRITABLE);
122128
log::debug!("connection:{} remove readable from tcp target", self.index);
123129
changed = true;
124130
}

src/server/udp_backend.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,22 +191,28 @@ impl Backend for UdpBackend {
191191
_ => {
192192
let mut changed = false;
193193
if !self.send_buffer.is_empty() && !self.readiness.is_writable() {
194-
self.readiness.add(Interest::WRITABLE);
194+
self.readiness |= Interest::WRITABLE;
195195
changed = true;
196196
log::debug!("connection:{} add writable to udp target", self.index);
197197
}
198198
if self.send_buffer.is_empty() && self.readiness.is_writable() {
199-
self.readiness.remove(Interest::WRITABLE);
199+
self.readiness = self
200+
.readiness
201+
.remove(Interest::WRITABLE)
202+
.unwrap_or(Interest::READABLE);
200203
changed = true;
201204
log::debug!("connection:{} remove writable from udp target", self.index);
202205
}
203206
if readable && !self.readiness.is_readable() {
204-
self.readiness.add(Interest::READABLE);
207+
self.readiness |= Interest::READABLE;
205208
log::debug!("connection:{} add readable to udp target", self.index);
206209
changed = true;
207210
}
208211
if !readable && self.readiness.is_readable() {
209-
self.readiness.remove(Interest::READABLE);
212+
self.readiness = self
213+
.readiness
214+
.remove(Interest::READABLE)
215+
.unwrap_or(Interest::WRITABLE);
210216
log::debug!("connection:{} remove readable to udp target", self.index);
211217
changed = true;
212218
}

src/tls_conn.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -190,20 +190,26 @@ impl<T: Session> TlsConn<T> {
190190
_ => {
191191
let mut changed = false;
192192
if self.session.wants_write() && !self.readiness.is_writable() {
193-
self.readiness.add(Interest::WRITABLE);
193+
self.readiness |= Interest::WRITABLE;
194194
changed = true;
195195
}
196196
if !self.session.wants_write() && self.readiness.is_writable() {
197-
self.readiness.remove(Interest::WRITABLE);
197+
self.readiness = self
198+
.readiness
199+
.remove(Interest::WRITABLE)
200+
.unwrap_or(Interest::READABLE);
198201
changed = true;
199202
}
200203
if readable && !self.readiness.is_readable() {
201-
self.readiness.add(Interest::READABLE);
204+
self.readiness |= Interest::READABLE;
202205
changed = true;
203206
}
204207

205208
if !readable && self.readiness.is_readable() {
206-
self.readiness.remove(Interest::READABLE);
209+
self.readiness = self
210+
.readiness
211+
.remove(Interest::READABLE)
212+
.unwrap_or(Interest::WRITABLE);
207213
changed = true;
208214
}
209215
if changed {

0 commit comments

Comments
 (0)