@@ -2,6 +2,7 @@ package tracetracking
22
33import (
44 "context"
5+ "errors"
56 "fmt"
67 "math/big"
78
@@ -342,23 +343,37 @@ func (m *ReceivedMessage) WaitForOutgoingMessagesToBeReceived(ctx context.Contex
342343 transactionsReceived := make (chan * tlb.Transaction )
343344 go c .SubscribeOnTransactions (ctx , sentMessage .InternalMsg .DstAddr , m .LamportTime , transactionsReceived )
344345
345- var receivedMessage * ReceivedMessage
346- for rTX := range transactionsReceived {
346+ receivedMessage , err := waitForMatchingMessage (ctx , transactionsReceived , sentMessage )
347+ if err != nil {
348+ return err
349+ }
350+ m .OutgoingInternalReceivedMessages = append (m .OutgoingInternalReceivedMessages , receivedMessage )
351+ }
352+
353+ return nil
354+ }
355+
356+ func waitForMatchingMessage (ctx context.Context , transactionsReceived chan * tlb.Transaction , sentMessage * SentMessage ) (* ReceivedMessage , error ) {
357+ for {
358+ select {
359+ case <- ctx .Done ():
360+ return nil , ctx .Err ()
361+ case rTX , ok := <- transactionsReceived :
362+ if ! ok {
363+ return nil , errors .New ("transaction channel closed" )
364+ }
365+
347366 if rTX .IO .In != nil && rTX .IO .In .MsgType == tlb .MsgTypeInternal {
348- var err error
349- receivedMessage , err = sentMessage .MapToReceivedMessageIfMatches (rTX )
367+ receivedMessage , err := sentMessage .MapToReceivedMessageIfMatches (rTX )
350368 if err != nil {
351- return fmt .Errorf ("failed to process incoming message: %w" , err )
369+ return nil , fmt .Errorf ("failed to process incoming message: %w" , err )
352370 }
353371 if receivedMessage != nil {
354- break
372+ return receivedMessage , nil
355373 }
356374 }
357375 }
358- m .OutgoingInternalReceivedMessages = append (m .OutgoingInternalReceivedMessages , receivedMessage )
359376 }
360-
361- return nil
362377}
363378
364379// MapToReceivedMessageIfMatches checks if a transaction corresponds to the reception
0 commit comments