From 450163a94de0725bc82b1bf40a5f7f4b9295d138 Mon Sep 17 00:00:00 2001 From: hailin Date: Sat, 6 Dec 2025 06:36:34 -0800 Subject: [PATCH] fix(context): use parent context instead of Background() to allow proper cancellation - Fixed delegate party event handler to use parent context with timeout - Fixed message acknowledgment to use parent context - Prevents orphan goroutines when session fails or party exits - Resolves system crash after delegate party failure --- .../services/server-party-api/cmd/server/main.go | 10 ++++++---- .../adapters/output/grpc/message_router_client.go | 3 ++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/backend/mpc-system/services/server-party-api/cmd/server/main.go b/backend/mpc-system/services/server-party-api/cmd/server/main.go index 578d965b..ae22f5cd 100644 --- a/backend/mpc-system/services/server-party-api/cmd/server/main.go +++ b/backend/mpc-system/services/server-party-api/cmd/server/main.go @@ -247,7 +247,9 @@ func createSessionEventHandler( // Automatically participate based on session type go func() { - ctx := context.Background() + // Use parent context to allow proper cancellation + participateCtx, cancel := context.WithTimeout(ctx, 5*time.Minute) + defer cancel() // Determine session type from event if event.EventType == "session_created" { @@ -264,7 +266,7 @@ func createSessionEventHandler( JoinToken: joinToken, } - result, err := participateKeygenUC.Execute(ctx, input) + result, err := participateKeygenUC.Execute(participateCtx, input) if err != nil { logger.Error("Keygen participation failed", zap.Error(err), @@ -285,7 +287,7 @@ func createSessionEventHandler( zap.Int("share_size", len(result.ShareForUser))) if err := messageRouter.SubmitDelegateShare( - ctx, + participateCtx, event.SessionId, partyID, result.ShareForUser, @@ -316,7 +318,7 @@ func createSessionEventHandler( // This will be passed through the session event or retrieved separately } - result, err := participateSigningUC.Execute(ctx, input) + result, err := participateSigningUC.Execute(participateCtx, input) if err != nil { logger.Error("Signing participation failed", zap.Error(err), diff --git a/backend/mpc-system/services/server-party/adapters/output/grpc/message_router_client.go b/backend/mpc-system/services/server-party/adapters/output/grpc/message_router_client.go index 4104ccbc..05241808 100644 --- a/backend/mpc-system/services/server-party/adapters/output/grpc/message_router_client.go +++ b/backend/mpc-system/services/server-party/adapters/output/grpc/message_router_client.go @@ -181,7 +181,8 @@ func (c *MessageRouterClient) SubscribeMessages( // Send acknowledgment for the received message go func(messageID, sessionIDStr, pID string) { - ackCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + // Use parent context to allow proper cancellation + ackCtx, cancel := context.WithTimeout(ctx, 5*time.Second) defer cancel() sid, _ := uuid.Parse(sessionIDStr) if err := c.AcknowledgeMessage(ackCtx, messageID, sid, pID, true, ""); err != nil {