@@ -240,10 +240,6 @@ struct Answer<VatId>
240
240
where
241
241
VatId : ' static ,
242
242
{
243
- // True from the point when the Call message is received to the point when both the `Finish`
244
- // message has been received and the `Return` has been sent.
245
- active : bool ,
246
-
247
243
return_has_been_sent : bool ,
248
244
249
245
// Send pipelined calls here. Becomes null as soon as a `Finish` is received.
@@ -264,7 +260,6 @@ where
264
260
impl < VatId > Answer < VatId > {
265
261
fn new ( ) -> Self {
266
262
Self {
267
- active : false ,
268
263
return_has_been_sent : false ,
269
264
pipeline : None ,
270
265
redirected_results : None ,
@@ -756,17 +751,17 @@ impl<VatId> ConnectionState<VatId> {
756
751
} ;
757
752
758
753
let slots = & mut connection_state. answers . borrow_mut ( ) . slots ;
759
- let answer = slots. entry ( answer_id) . or_insert_with ( Answer :: new) ;
760
- if answer. active {
754
+ let hash_map:: Entry :: Vacant ( slot) = slots. entry ( answer_id) else {
761
755
connection_state. release_exports ( & result_exports) ?;
762
756
return Err ( Error :: failed ( "questionId is already in use" . to_string ( ) ) ) ;
763
- }
764
- answer. active = true ;
757
+ } ;
758
+ let mut answer = Answer :: new ( ) ;
765
759
answer. return_has_been_sent = true ;
766
760
answer. result_exports = result_exports;
767
761
answer. pipeline = Some ( Box :: new ( SingleCapPipeline :: new (
768
762
connection_state. bootstrap_cap . clone ( ) ,
769
763
) ) ) ;
764
+ slot. insert ( answer) ;
770
765
771
766
let _ = response. send ( ) ;
772
767
Ok ( ( ) )
@@ -785,11 +780,6 @@ impl<VatId> ConnectionState<VatId> {
785
780
) ) ) ;
786
781
}
787
782
Some ( answer) => {
788
- if !answer. active {
789
- return Err ( Error :: failed ( format ! (
790
- "'Finish' for invalid question ID {answer_id}."
791
- ) ) ) ;
792
- }
793
783
answer. received_finish . set ( true ) ;
794
784
795
785
if finish. get_release_result_caps ( ) {
@@ -964,11 +954,10 @@ impl<VatId> ConnectionState<VatId> {
964
954
965
955
{
966
956
let slots = & mut connection_state. answers . borrow_mut ( ) . slots ;
967
- let answer = slots. entry ( question_id) . or_insert ( answer) ;
968
- if answer. active {
957
+ let hash_map:: Entry :: Vacant ( slot) = slots. entry ( question_id) else {
969
958
return Err ( Error :: failed ( "questionId is already in use" . to_string ( ) ) ) ;
970
- }
971
- answer . active = true ;
959
+ } ;
960
+ slot . insert ( answer ) ;
972
961
}
973
962
974
963
let call_promise =
@@ -1537,11 +1526,9 @@ impl<VatId> ConnectionState<VatId> {
1537
1526
let promised_answer = receiver_answer?;
1538
1527
let question_id = promised_answer. get_question_id ( ) ;
1539
1528
if let Some ( answer) = state. answers . borrow ( ) . slots . get ( & question_id) {
1540
- if answer. active {
1541
- if let Some ( ref pipeline) = answer. pipeline {
1542
- let ops = to_pipeline_ops ( promised_answer. get_transform ( ) ?) ?;
1543
- return Ok ( Some ( pipeline. get_pipelined_cap ( & ops) ) ) ;
1544
- }
1529
+ if let Some ( ref pipeline) = answer. pipeline {
1530
+ let ops = to_pipeline_ops ( promised_answer. get_transform ( ) ?) ?;
1531
+ return Ok ( Some ( pipeline. get_pipelined_cap ( & ops) ) ) ;
1545
1532
}
1546
1533
}
1547
1534
Ok ( Some ( broken:: new_cap ( Error :: failed (
0 commit comments