diff --git a/gateway/middleware.go b/gateway/middleware.go index 652bc33..e949259 100644 --- a/gateway/middleware.go +++ b/gateway/middleware.go @@ -161,8 +161,10 @@ func RequestTimeoutMiddleware(timeout time.Duration) gin.HandlerFunc { var cancel context.CancelFunc var ctx context.Context if timeout <= 0 { - // Preserve the existing behavior for zero/negative values. - ctx, cancel = context.WithTimeout(c.Request.Context(), timeout) + // Zero/negative timeout means no timeout — use the existing context + // without wrapping it, so requests don't cancel immediately. + ctx = c.Request.Context() + cancel = func() {} // no-op to avoid nil cancel panic in defer } else { if d, ok := c.Request.Context().Deadline(); ok { desired := time.Now().Add(timeout) @@ -170,6 +172,7 @@ func RequestTimeoutMiddleware(timeout time.Duration) gin.HandlerFunc { // a new deadline at the desired point. if d.Before(desired) { ctx = c.Request.Context() + cancel = func() {} // no-op to avoid nil cancel panic in defer } else { ctx, cancel = context.WithDeadline(c.Request.Context(), desired) } @@ -177,9 +180,7 @@ func RequestTimeoutMiddleware(timeout time.Duration) gin.HandlerFunc { ctx, cancel = context.WithTimeout(c.Request.Context(), timeout) } } - if cancel != nil { - defer cancel() - } + defer cancel() c.Request = c.Request.WithContext(ctx) origWriter := c.Writer