1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-25 16:49:18 -05:00

fix(ext/websocket): prevent 'closed normally' panic (#12437)

This commit is contained in:
Leo K 2021-10-19 18:21:15 +02:00 committed by GitHub
parent f83c756aa0
commit d6062b2653
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 5 deletions

View file

@ -417,6 +417,7 @@
}); });
break; break;
} }
case "closed":
case "close": { case "close": {
this[_readyState] = CLOSED; this[_readyState] = CLOSED;

View file

@ -261,6 +261,7 @@
}); });
break; break;
} }
case "closed":
case "close": { case "close": {
if (this[_closing]) { if (this[_closing]) {
this[_closed].resolve(value); this[_closed].resolve(value);

View file

@ -82,7 +82,8 @@ pub struct WsStreamResource {
impl WsStreamResource { impl WsStreamResource {
async fn send(self: &Rc<Self>, message: Message) -> Result<(), AnyError> { async fn send(self: &Rc<Self>, message: Message) -> Result<(), AnyError> {
match self.stream { use tokio_tungstenite::tungstenite::Error;
let res = match self.stream {
WebSocketStreamType::Client { .. } => { WebSocketStreamType::Client { .. } => {
let mut tx = RcRef::map(self, |r| match &r.stream { let mut tx = RcRef::map(self, |r| match &r.stream {
WebSocketStreamType::Client { tx, .. } => tx, WebSocketStreamType::Client { tx, .. } => tx,
@ -90,7 +91,7 @@ impl WsStreamResource {
}) })
.borrow_mut() .borrow_mut()
.await; .await;
tx.send(message).await?; tx.send(message).await
} }
WebSocketStreamType::Server { .. } => { WebSocketStreamType::Server { .. } => {
let mut tx = RcRef::map(self, |r| match &r.stream { let mut tx = RcRef::map(self, |r| match &r.stream {
@ -99,11 +100,15 @@ impl WsStreamResource {
}) })
.borrow_mut() .borrow_mut()
.await; .await;
tx.send(message).await?; tx.send(message).await
} }
} };
Ok(()) match res {
Ok(()) => Ok(()),
Err(Error::ConnectionClosed) => Ok(()),
Err(err) => Err(err.into()),
}
} }
async fn next_message( async fn next_message(