Skip to content

Releases: Kotlin/kotlinx.coroutines

1.4.2

26 Nov 17:24
7223897
Compare
Choose a tag to compare
  • Fixed StackOverflowError in Job.toString when Job is observed in its intermediate state (#2371).
  • Improved liveness and latency of Dispatchers.Default and Dispatchers.IO in low-loaded mode (#2381).
  • Improved performance of consecutive Channel.cancel invocations (#2384).
  • SharingStarted is now fun interface (#2397).
  • Additional lint settings for SharedFlow to catch programmatic errors early (#2376).
  • Fixed bug when mutex and semaphore were not released during cancellation (#2390, thanks to @Tilps for reproducing).
  • Some corner cases in cancellation propagation between coroutines and listenable futures are repaired (#1442, thanks to @vadimsemenov).
  • Fixed unconditional cast to CoroutineStackFrame in exception recovery that triggered failures of instrumented code (#2386).
  • Platform-specific dependencies are removed from kotlinx-coroutines-javafx (#2360).

1.4.1

03 Nov 21:23
Compare
Choose a tag to compare

This is a patch release with an important fix to the SharedFlow implementation.

  • SharedFlow: Fix scenario with concurrent emitters and cancellation of a subscriber (#2359, thanks to @vehovsky for the bug report).

1.4.0

26 Oct 18:43
Compare
Choose a tag to compare

Improvements

  • StateFlow, SharedFlow and corresponding operators are promoted to stable API (#2316).
  • Flow.debounce operator with timeout selector based on each individual element is added (#1216, thanks to @mkano9!).
  • CoroutineContext.job extension property is introduced (#2159).
  • Flow.combine operator is reworked:
    • Complete fairness is maintained for single-threaded dispatchers.
    • Its performance is improved, depending on the use-case, by at least 50% (#2296).
    • Quadratic complexity depending on the number of upstream flows is eliminated (#2296).
    • crossinline and inline-heavy internals are removed, fixing sporadic SIGSEGV on Mediatek Android devices (#1683, #1743).
  • Flow.zip operator performance is improved by 40%.
  • Various API has been promoted to stable or its deprecation level has been raised (#2316).

Bug fixes

  • Suspendable stateIn operator propagates exception to the caller when upstream fails to produce initial value (#2329).
  • Fix SharedFlow with replay for subscribers working at different speed (#2325).
  • Do not fail debug agent installation when security manager does not provide access to system properties (#2311).
  • Cancelled lazy coroutines are properly cleaned up from debug agent output (#2294).
  • BlockHound false-positives are correctly filtered out (#2302, #2190, #2303).
  • Potential crash during a race between cancellation and upstream in Observable.asFlow is fixed (#2104, #2299, thanks to @LouisCAD and @drinkthestars).

1.4.0-M1

13 Oct 13:11
1b34e1c
Compare
Choose a tag to compare

Breaking changes

  • The concept of atomic cancellation in channels is removed. All operations in channels
    and corresponding Flow operators are cancellable in non-atomic way (#1813).
  • If CoroutineDispatcher throws RejectedExecutionException, cancel current Job and schedule its execution to Dispatchers.IO (#2003).
  • CancellableContinuation.invokeOnCancellation is invoked if the continuation was cancelled while its resume has been dispatched (#1915).
  • Flow.singleOrNull operator is aligned with standard library and does not longer throw IllegalStateException on multiple values (#2289).

New experimental features

  • SharedFlow primitive for managing hot sources of events with support of various subscription mechanisms, replay logs and buffering (#2034).
  • Flow.shareIn and Flow.stateIn operators to transform cold instances of flow to hot SharedFlow and StateFlow respectively (#2047).

Other

  • Support leak-free closeable resources transfer via onUndeliveredElement in channels (#1936).
  • Changed ABI in reactive integrations for Java interoperability (#2182).
  • Fixed ProGuard rules for kotlinx-coroutines-core (#2046, #2266).
  • Lint settings were added to Flow to avoid accidental capturing of outer CoroutineScope for cancellation check (#2038).

External contributions

  • Allow nullable types in Flow.firstOrNull and Flow.singleOrNull by @ansman (#2229).
  • Add Publisher.awaitSingleOrDefault|Null|Else extensions by @sdeleuze (#1993).
  • awaitCancellation top-level function by @LouisCAD (#2213).
  • Significant part of our Gradle build scripts were migrated to .kts by @turansky.

Thank you for your contributions and participation in the Kotlin community!

1.3.9

17 Aug 11:27
247b34c
Compare
Choose a tag to compare
  • Support of CoroutineContext in Flow.asPublisher and similar reactive builders (#2155).
  • Kotlin updated to 1.4.0.
  • Transition to new HMPP publication scheme for multiplatform usages:
    • Artifacts kotlinx-coroutines-core-common and kotlinx-coroutines-core-native are removed.
    • For multiplatform usages, it's enough to depend directly on kotlinx-coroutines-core in commonMain source-set.
    • The same artifact coordinates can be used to depend on a platform-specific artifact in platform-specific source-set.

1.3.8

16 Jul 21:47
Compare
Choose a tag to compare

New experimental features

  • Added Flow.transformWhile operator (#2065).
  • Replaced scanReduce with runningReduce to be consistent with the Kotlin standard library (#2139).

Bug fixes and improvements

  • Improve user experience for the upcoming coroutines debugger (#2093, #2118, #2131).
  • Debugger no longer retains strong references to the running coroutines (#2129).
  • Fixed race in Flow.asPublisher (#2109).
  • Fixed ensureActive to work in the empty context case to fix IllegalStateException when using flow from suspend fun main (#2044).
  • Fixed a problem with AbortFlowException in the Flow.first operator to avoid erroneous NoSuchElementException (#2051).
  • Fixed JVM dependency on Android annotations (#2075).
  • Removed keep rules mentioning kotlinx.coroutines.android from core module (#2061 by @mkj-gram).
  • Corrected some docs and examples (#2062, #2071, #2076, #2107, #2098, #2127, #2078, #2135).
  • Improved the docs and guide on flow cancellation (#2043).
  • Updated Gradle version to 6.3 (it only affects multiplatform artifacts in this release).

1.3.7

19 May 12:35
1eeed50
Compare
Choose a tag to compare
  • Fixed problem that triggered Android Lint failure (#2004).
  • New Flow.cancellable() operator for cooperative cancellation (#2026).
  • Emissions from flow builder now check cancellation status and are properly cancellable (#2026).
  • New currentCoroutineContext function to use unambiguously in the contexts with CoroutineScope in receiver position (#2026).
  • EXACTLY_ONCE contract support in coroutine builders.
  • Various documentation improvements.

1.3.6

08 May 17:51
583ec6e
Compare
Choose a tag to compare

Flow

  • StateFlow, new primitive for state handling (#1973, #1816, #395). The StateFlow is designed to eventually replace ConflatedBroadcastChannel for state publication scenarios. Please, try it and share your feedback. Note, that Flow-based primitives to publish events will be added later. For events you should continue to either use BroadcastChannel(1), if you put events into the StateFlow, protect them from double-processing with flags.
  • Flow.onEmpty operator is introduced (#1890).
  • Behavioural change in Flow.onCompletion, it is aligned with invokeOnCompletion now and passes CancellationException to its cause parameter (#1693).
  • A lot of Flow operators have left its experimental status and are promoted to stable API.

Other

  • runInterruptible primitive to tie cancellation with thread interruption for blocking calls. Contributed by @jxdabc (#1947).
  • Integration module with RxJava3 is introduced. Contributed by @ZacSweers (#1883)
  • Integration with BlockHound in kotlinx-coroutines-debug module (#1821, #1060).
  • Memory leak in ArrayBroadcastChannel is fixed (#1885).
  • Behavioural change in suspendCancellableCoroutine, cancellation is established before invoking passed block argument (#1671).
  • Debug agent internals are moved into kotlinx-coroutines-core for better integration with IDEA. It should not affect library users and all the redundant code should be properly eliminated with R8.
  • ClassCastException with reusable continuations bug is fixed (#1966).
  • More precise scheduler detection for Executor.asCoroutineDispatcher (#1992).
  • Kotlin updated to 1.3.71.

1.3.5

17 Mar 15:18
3bb3e55
Compare
Choose a tag to compare

Version 1.3.5

  • firstOrNull operators. Contributed by @bradynpoulsen
  • java.time adapters for Flow operators. Contributed by @fvasco
  • kotlin.time.Duration support (#1402). Contributed by @fvasco
  • Memory leak with a mix of reusable and non-reusable continuations is fixed (#1855)
  • DebugProbes are ready for production installation: its performance is increased, the flag to disable creation stacktraces to reduce the footprint is introduced (#1379, #1372)
  • Stacktrace recovery workaround for Android 6.0 and earlier bug (#1866).
  • New integration module: kotlinx-coroutines-jdk9 with adapters for java.util.concurrent.Flow
  • BroadcastChannel.close properly starts lazy coroutine (#1713).
  • kotlinx-coroutines-bom is published without Gradle metadata.
  • Make calls to service loader in reactor integrations optimizable by R8 (#1817)

1.3.4

06 Mar 12:03
d7de5f5
Compare
Choose a tag to compare

Flow

  • Detect missing awaitClose calls in callbackFlow to make it less error-prone when used with callbacks (#1762, #1770). This change makes callbackFlow different from channelFlow
  • ReceiveChannel.asFlow extension is introduced (#1490)
  • Enforce exception transparency invariant in flow builder (#1657)
  • Proper Dispatcher support in Flow reactive integrations (#1765)
  • Batch Subscription.request calls in Flow reactive integration (#766)
  • ObservableValue.asFlow added to JavaFx integration module (#1695)
  • ObservableSource.asFlow added to RxJava2 integration module (#1768)

Other changes

  • kotlinx-coroutines-core is optimized for R8, making it much smaller for Android usages (75 KB for 1.3.4 release)
  • Performance of Dispatchers.Default is improved (#1704, #1706)
  • Kotlin is updated to 1.3.70
  • CoroutineDispatcher and ExecutorCoroutineDispatcher experimental coroutine context keys are introduced (#1805)
  • Performance of various Channel operations is improved (#1565)