@@ -14,7 +14,7 @@ use rivet_guard_core::{
1414 ServiceUnavailable , WebSocketServiceHibernate , WebSocketServiceTimeout ,
1515 WebSocketServiceUnavailable ,
1616 } ,
17- proxy_service:: ResponseBody ,
17+ proxy_service:: { ResponseBody , is_ws_hibernate } ,
1818 request_context:: RequestContext ,
1919 websocket_handle:: WebSocketReceiver ,
2020} ;
@@ -559,28 +559,33 @@ impl CustomServeTrait for PegboardGateway {
559559 ( res, _) => res,
560560 } ;
561561
562- // Send WebSocket close message to runner
563- let ( close_code, close_reason) = match & mut lifecycle_res {
564- // Taking here because it won't be used again
565- Ok ( LifecycleResult :: ClientClose ( Some ( close) ) ) => {
566- ( close. code , Some ( std:: mem:: take ( & mut close. reason ) ) )
567- }
568- Ok ( _) => ( CloseCode :: Normal . into ( ) , None ) ,
569- Err ( _) => ( CloseCode :: Error . into ( ) , Some ( "ws.downstream_closed" . into ( ) ) ) ,
570- } ;
571- let close_message = protocol:: ToClientTunnelMessageKind :: ToClientWebSocketClose (
572- protocol:: ToClientWebSocketClose {
573- code : Some ( close_code. into ( ) ) ,
574- reason : close_reason. map ( |x| x. as_str ( ) . to_string ( ) ) ,
575- } ,
576- ) ;
577-
578- if let Err ( err) = self
579- . shared_state
580- . send_message ( request_id, close_message)
581- . await
562+ // Send close frame to runner if not hibernating
563+ if lifecycle_res
564+ . as_ref ( )
565+ . map_or_else ( is_ws_hibernate, |_| false )
582566 {
583- tracing:: error!( ?err, "error sending close message" ) ;
567+ let ( close_code, close_reason) = match & mut lifecycle_res {
568+ // Taking here because it won't be used again
569+ Ok ( LifecycleResult :: ClientClose ( Some ( close) ) ) => {
570+ ( close. code , Some ( std:: mem:: take ( & mut close. reason ) ) )
571+ }
572+ Ok ( _) => ( CloseCode :: Normal . into ( ) , None ) ,
573+ Err ( _) => ( CloseCode :: Error . into ( ) , Some ( "ws.downstream_closed" . into ( ) ) ) ,
574+ } ;
575+ let close_message = protocol:: ToClientTunnelMessageKind :: ToClientWebSocketClose (
576+ protocol:: ToClientWebSocketClose {
577+ code : Some ( close_code. into ( ) ) ,
578+ reason : close_reason. map ( |x| x. as_str ( ) . to_string ( ) ) ,
579+ } ,
580+ ) ;
581+
582+ if let Err ( err) = self
583+ . shared_state
584+ . send_message ( request_id, close_message)
585+ . await
586+ {
587+ tracing:: error!( ?err, "error sending close message" ) ;
588+ }
584589 }
585590
586591 // Send WebSocket close message to client
0 commit comments