From 21f2dd52ae4131b6e8d694d875e657f7e2b1c443 Mon Sep 17 00:00:00 2001 From: Stephen Celis Date: Mon, 22 Jun 2020 10:43:18 -0400 Subject: [PATCH] Merge debug reducer to avoid Combine leak (#195) --- .../Debugging/ReducerDebugging.swift | 2 +- Sources/ComposableArchitecture/Effect.swift | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Sources/ComposableArchitecture/Debugging/ReducerDebugging.swift b/Sources/ComposableArchitecture/Debugging/ReducerDebugging.swift index 6def4397088c..193af1d8c3cd 100644 --- a/Sources/ComposableArchitecture/Debugging/ReducerDebugging.swift +++ b/Sources/ComposableArchitecture/Debugging/ReducerDebugging.swift @@ -106,7 +106,7 @@ extension Reducer { guard let localAction = toLocalAction.extract(from: action) else { return effects } let nextState = toLocalState(state) let debugEnvironment = toDebugEnvironment(environment) - return .concatenate( + return .merge( .fireAndForget { debugEnvironment.queue.async { let actionOutput = diff --git a/Sources/ComposableArchitecture/Effect.swift b/Sources/ComposableArchitecture/Effect.swift index fb169aaa61e9..f1be9ac32834 100644 --- a/Sources/ComposableArchitecture/Effect.swift +++ b/Sources/ComposableArchitecture/Effect.swift @@ -170,6 +170,12 @@ public struct Effect: Publisher { /// Concatenates a variadic list of effects together into a single effect, which runs the effects /// one after the other. /// + /// - Warning: Combine's `Publishers.Concatenate` operator, which this function uses, can leak + /// when its suffix is a `Publishers.MergeMany` operator, which is used throughout the + /// Composable Architecture in functions like `Reducer.combine`. + /// + /// Feedback filed: + /// /// - Parameter effects: A variadic list of effects. /// - Returns: A new effect public static func concatenate(_ effects: Effect...) -> Effect { @@ -179,6 +185,12 @@ public struct Effect: Publisher { /// Concatenates a collection of effects together into a single effect, which runs the effects one /// after the other. /// + /// - Warning: Combine's `Publishers.Concatenate` operator, which this function uses, can leak + /// when its suffix is a `Publishers.MergeMany` operator, which is used throughout the + /// Composable Architecture in functions like `Reducer.combine`. + /// + /// Feedback filed: + /// /// - Parameter effects: A collection of effects. /// - Returns: A new effect public static func concatenate(