@@ -128,6 +128,7 @@ func (s *Submitter) Start(ctx context.Context) error {
128128
129129 // Start DA submission loop if signer is available (aggregator nodes only)
130130 if s .signer != nil {
131+ s .logger .Info ().Msg ("starting DA submission loop" )
131132 s .wg .Add (1 )
132133 go func () {
133134 defer s .wg .Done ()
@@ -150,7 +151,18 @@ func (s *Submitter) Stop() error {
150151 if s .cancel != nil {
151152 s .cancel ()
152153 }
153- s .wg .Wait ()
154+ // Wait for goroutines to finish with a timeout to prevent hanging
155+ done := make (chan struct {})
156+ go func () {
157+ s .wg .Wait ()
158+ close (done )
159+ }()
160+ select {
161+ case <- done :
162+ // All goroutines finished cleanly
163+ case <- time .After (5 * time .Second ):
164+ s .logger .Warn ().Msg ("submitter shutdown timed out waiting for goroutines, proceeding anyway" )
165+ }
154166 s .logger .Info ().Msg ("submitter stopped" )
155167 return nil
156168}
@@ -180,8 +192,14 @@ func (s *Submitter) daSubmissionLoop() {
180192 // For strategy decision, we need to estimate the size
181193 // We'll fetch headers to check, but only submit if strategy approves
182194 if s .headerSubmissionMtx .TryLock () {
195+ s .logger .Debug ().Time ("t" , time .Now ()).Uint64 ("headers" , headersNb ).Msg ("Header submission in progress" )
196+ s .wg .Add (1 )
183197 go func () {
184- defer s .headerSubmissionMtx .Unlock ()
198+ defer func () {
199+ s .headerSubmissionMtx .Unlock ()
200+ s .logger .Debug ().Time ("t" , time .Now ()).Uint64 ("headers" , headersNb ).Msg ("Header submission completed" )
201+ s .wg .Done ()
202+ }()
185203
186204 // Get headers with marshalled bytes from cache
187205 headers , marshalledHeaders , err := s .cache .GetPendingHeaders (s .ctx )
@@ -233,10 +251,15 @@ func (s *Submitter) daSubmissionLoop() {
233251 if dataNb > 0 {
234252 lastSubmitNanos := s .lastDataSubmit .Load ()
235253 timeSinceLastSubmit := time .Since (time .Unix (0 , lastSubmitNanos ))
236-
254+ s .logger .Debug ().Time ("t" , time .Now ()).Uint64 ("data" , dataNb ).Msg ("Data submission in progress" )
255+ s .wg .Add (1 )
237256 if s .dataSubmissionMtx .TryLock () {
238257 go func () {
239- defer s .dataSubmissionMtx .Unlock ()
258+ defer func () {
259+ s .dataSubmissionMtx .Unlock ()
260+ s .logger .Debug ().Time ("t" , time .Now ()).Uint64 ("data" , dataNb ).Msg ("Data submission completed" )
261+ s .wg .Done ()
262+ }()
240263
241264 // Get data with marshalled bytes from cache
242265 signedDataList , marshalledData , err := s .cache .GetPendingData (s .ctx )
0 commit comments