@@ -81,8 +81,8 @@ pub(crate) enum FatalError {
81
81
VersionNegotiationFailed ,
82
82
#[ error( "control receive failed" ) ]
83
83
VersionNegotiationTryRecvFailed ( #[ source] RecvError ) ,
84
- #[ error( "received response with no pending request" ) ]
85
- NoPendingRequest ,
84
+ #[ error( "received response id {0:?} with no pending request" ) ]
85
+ NoPendingRequest ( HostRequests ) ,
86
86
#[ error( "failed to serialize VTL2 settings error info" ) ]
87
87
Vtl2SettingsErrorInfoJson ( #[ source] serde_json:: error:: Error ) ,
88
88
#[ error( "received too many guest notifications of kind {0:?} prior to downstream worker init" ) ]
@@ -845,27 +845,25 @@ impl<T: RingMem> ProcessLoop<T> {
845
845
. map ( Event :: Failure ) ;
846
846
847
847
// Closure to share code between the primary and secondary host request queue.
848
- let run_host_request_queue = async | request_queue : & mut HostRequestQueue , response_recv : & ExclusiveHostRequestResponseReceiverAccess | {
849
- while let Some ( request) = request_queue. front_mut ( ) {
850
- if let Err ( e) = request. as_mut ( ) . await {
851
- return e;
852
- }
848
+ let run_host_request_queue =
849
+ async |request_queue : & mut HostRequestQueue , response_recv : & ExclusiveHostRequestResponseReceiverAccess | {
850
+ while let Some ( request) = request_queue. front_mut ( ) {
851
+ if let Err ( e) = request. as_mut ( ) . await {
852
+ return e;
853
+ }
853
854
854
- request_queue. pop_front ( ) ;
855
-
856
- // Ensure there are no extra response messages that this request failed to pick up.
857
- if response_recv
858
- . lock ( )
859
- . as_mut ( )
860
- . unwrap ( )
861
- . try_recv ( )
862
- . is_ok ( )
863
- {
864
- return FatalError :: NoPendingRequest ;
855
+ request_queue. pop_front ( ) ;
856
+
857
+ // Ensure there are no extra response messages that this request failed to pick up.
858
+ if let Ok ( resp) = response_recv. lock ( ) . as_mut ( ) . unwrap ( ) . try_recv ( ) {
859
+ let id = get_protocol:: HeaderRaw :: read_from_prefix ( & resp)
860
+ . map ( |head| HostRequests ( head. 0 . message_id ) )
861
+ . unwrap_or ( HostRequests :: INVALID ) ;
862
+ return FatalError :: NoPendingRequest ( id) ;
863
+ }
865
864
}
866
- }
867
- pending ( ) . await
868
- } ;
865
+ pending ( ) . await
866
+ } ;
869
867
870
868
// Run the next host request in the primary queue. These host
871
869
// requests are expected to be generally fast and independent
@@ -1316,7 +1314,7 @@ impl<T: RingMem> ProcessLoop<T> {
1316
1314
buf : & [ u8 ] ,
1317
1315
) -> Result < ( ) , FatalError > {
1318
1316
if self . primary_host_requests . is_empty ( ) && self . secondary_host_requests . is_empty ( ) {
1319
- return Err ( FatalError :: NoPendingRequest ) ;
1317
+ return Err ( FatalError :: NoPendingRequest ( header . message_id ( ) ) ) ;
1320
1318
}
1321
1319
validate_response ( header) ?;
1322
1320
0 commit comments