Skip to content

Releases: Kotlin/kotlinx.coroutines

1.7.0-Beta

09 Mar 13:18
204cf5d
Compare
Choose a tag to compare

Core API significant improvements

  • New Channel implementation with significant performance improvements across the API (#3621).
  • New select operator implementation: faster, more lightweight, and more robust (#3020).
  • Mutex and Semaphore now share the same underlying data structure (#3020).
  • Dispatchers.IO is added to K/N (#3205)
    • newFixedThreadPool and Dispatchers.Default implementations on K/N were wholly rewritten to support graceful growth under load (#3595).
  • kotlinx-coroutines-test rework:
    • Add the timeout parameter to runTest for the whole-test timeout, 10 seconds by default (#3270). This replaces the configuration of quiescence timeouts, which is now deprecated (#3603).
    • The withTimeout exception messages indicate if the timeout used the virtual time (#3588).
    • TestCoroutineScheduler, runTest, and TestScope API are promoted to stable (#3622).
    • runTest now also fails if there were uncaught exceptions in coroutines not inherited from the test coroutine (#1205).

Breaking changes

  • Old K/N memory model is no longer supported (#3375).
  • New generic upper bounds were added to reactive integration API where the language since 1.8.0 dictates (#3393).
  • kotlinx-coroutines-core and kotlinx-coroutines-jdk8 artifacts were merged into a single artifact (#3268).
  • Artificial stackframes in stacktrace recovery no longer contain the \b symbol and are now navigable in IDE and supplied with proper documentation (#2291).
  • CoroutineContext.isActive returns true for contexts without any job in them (#3300).

Bug fixes and improvements

  • Kotlin version is updated to 1.8.10.
  • JPMS is supported (#2237). Thanks @lion7!
  • BroadcastChannel and all the corresponding API are deprecated (#2680).
  • Added all supported K/N targets (#3601, #812, #855).
  • K/N Dispatchers.Default is backed by the number of threads equal to the number of available cores (#3366).
  • Fixed an issue where some coroutines' internal exceptions were not properly serializable (#3328).
  • Introduced Job.parent API (#3201).
  • Fixed a bug when TestScheduler leaked cancelled jobs (#3398).
  • TestScope.timeSource now provides comparable time marks (#3617). Thanks @hfhbd!
  • Fixed an issue when cancelled withTimeout handles were preserved in JS runtime (#3440).
  • Ensure awaitFrame only awaits a single frame when used from the main looper (#3432). Thanks @pablobaxter!
  • Obsolete Class-Path attribute was removed from kotlinx-coroutines-debug.jar manifest (#3361).
  • Fixed a bug when updateThreadContext operated on the parent context (#3411).
  • Added new Flow.filterIsInstance extension (#3240).
  • Dispatchers.Default thread name prefixes are now configurable with system property (#3231).
  • Added Flow.timeout operator as @FlowPreview (#2624). Thanks @pablobaxter!
  • Improved the performance of the future builder in case of exceptions (#3475). Thanks @He-Pin!
  • Mono.awaitSingleOrNull now waits for the onComplete signal (#3487).
  • Channel.isClosedForSend and Channel.isClosedForReceive are promoted from experimental to delicate (#3448).
  • Fixed a data race in native EventLoop (#3547).
  • Dispatchers.IO.limitedParallelism(valueLargerThanIOSize) no longer creates an additional wrapper (#3442). Thanks @dovchinnikov!
  • Various @FlowPreview and @ExperimentalCoroutinesApi are promoted to experimental and stable respectively (#3542, #3097, #3548).
  • Performance improvements in Dispatchers.Default and Dispatchers.IO (#3416, #3418).
  • Fixed a bug when internal suspendCancellableCoroutineReusable might have hanged (#3613).
  • Introduced internal API to process events in the current system dispatcher (#3439).
  • Global CoroutineExceptionHandler is no longer invoked in case of unprocessed future failure (#3452).
  • Performance improvements and reduced thread-local pressure for the withContext operator (#3592).
  • Improved performance of DebugProbes (#3527).
  • Fixed a bug when the coroutine debugger might have detected the state of a coroutine incorrectly (#3193).
  • Various documentation improvements and fixes.

1.6.4

13 Jul 11:09
Compare
Choose a tag to compare
  • Added TestScope.backgroundScope for launching coroutines that perform work in the background and need to be cancelled at the end of the test (#3287).
  • Fixed the POM of kotlinx-coroutines-debug having an incorrect reference to kotlinx-coroutines-bom, which cause the builds of Maven projects using the debug module to break (#3334).
  • Fixed the Publisher.await functions in kotlinx-coroutines-reactive not ensuring that the Subscriber methods are invoked serially (#3360). Thank you, @EgorKulbachka!
  • Fixed a memory leak in withTimeout on K/N with the new memory model (#3351).
  • Added the guarantee that all Throwable implementations in the core library are serializable (#3328).
  • Moved the documentation to https://kotlinlang.org/api/kotlinx.coroutines/ (#3342).
  • Various documentation improvements.

1.6.3

20 Jun 12:07
Compare
Choose a tag to compare
  • Updated atomicfu version to 0.17.3 (#3321), fixing the projects using this library with JS IR failing to build (#3305).

1.6.2

27 May 16:09
d737da6
Compare
Choose a tag to compare
  • Fixed a bug with ThreadLocalElement not being correctly updated when the most outer suspend function was called directly without kotlinx.coroutines (#2930).
  • Fixed multiple data races: one that might have been affecting runBlocking event loop, and a benign data race in Mutex (#3250, #3251).
  • Obsolete TestCoroutineContext is removed, which fixes the kotlinx-coroutines-test JPMS package being split between kotlinx-coroutines-core and kotlinx-coroutines-test (#3218).
  • Updated the ProGuard rules to further shrink the size of the resulting DEX file with coroutines (#3111, #3263). Thanks, @agrieve!
  • Atomicfu is updated to 0.17.2, which includes a more efficient and robust JS IR transformer (#3255).
  • Kotlin is updated to 1.6.21, Gradle version is updated to 7.4.2 (#3281). Thanks, @wojtek-kalicinski!
  • Various documentation improvements.

1.6.1

04 Apr 15:49
2c3435c
Compare
Choose a tag to compare
  • Rollback of time-related functions dispatching on Dispatchers.Main.
    This behavior was introduced in 1.6.0 and then found inconvenient and erroneous (#3106, #3113).
  • Reworked the newly-introduced CopyableThreadContextElement to solve issues uncovered after the initial release (#3227).
  • Fixed a bug with ThreadLocalElement not being properly updated in racy scenarios (#2930).
  • Reverted eager loading of default CoroutineExceptionHandler that triggered ANR on some devices (#3180).
  • New API to convert a CoroutineDispatcher to a Rx scheduler (#968, #548). Thanks @recheej!
  • Fixed a memory leak with the very last element emitted from flow builder being retained in memory (#3197).
  • Fixed a bug with limitedParallelism on K/N with new memory model throwing ClassCastException (#3223).
  • CoroutineContext is added to the exception printed to the default CoroutineExceptionHandler to improve debuggability (#3153).
  • Static memory consumption of Dispatchers.Default was significantly reduced (#3137).
  • Updated slf4j version in kotlinx-coroutines-slf4j from 1.7.25 to 1.7.32.

1.6.0

22 Dec 09:38
c51f795
Compare
Choose a tag to compare

Note that this is a full changelog relative to the 1.5.2 version. Changelog relative to 1.6.0-RC3 can be found at the end.

kotlinx-coroutines-test rework

Dispatchers

  • Introduced CoroutineDispatcher.limitedParallelism that allows obtaining a view of the original dispatcher with limited parallelism (#2919).
  • Dispatchers.IO.limitedParallelism usages ignore the bound on the parallelism level of Dispatchers.IO itself to avoid starvation (#2943).
  • Introduced new Dispatchers.shutdown method for containerized environments (#2558).
  • newSingleThreadContext and newFixedThreadPoolContext are promoted to delicate API (#2919).

Breaking changes

  • When racing with cancellation, the future builder no longer reports unhandled exceptions into the global CoroutineExceptionHandler. Thanks @vadimsemenov! (#2774, #2791).
  • Mutex.onLock is deprecated for removal (#2794).
  • Dispatchers.Main is now used as the default source of time for delay and withTimeout when present (#2972).
    • To opt-out from this behaviour, kotlinx.coroutines.main.delay system property can be set to false.
  • Java target of coroutines build is now 8 instead of 6 (#1589).
  • Source-breaking change: extension collect no longer resolves when used with a non-in-place argument of a functional type. This is a candidate for a fix, uncovered after 1.6.0, see #3107 for the additional details.

Bug fixes and improvements

  • Kotlin is updated to 1.6.0.
  • Kotlin/Native new memory model is now supported in regular builds of coroutines conditionally depending on whether kotlin.native.binary.memoryModel is enabled (#2914).
  • Introduced CopyableThreadContextElement for mutable context elements shared among multiple coroutines. Thanks @yorickhenning! (#2893).
  • transformWhile, awaitClose, ProducerScope, merge, runningFold, runingReduce, and scan are promoted to stable API (#2971).
  • SharedFlow.subscriptionCount no longer conflates incoming updates and gives all subscribers a chance to observe a short-lived subscription (#2488, #2863, #2871).
  • Flow exception transparency mechanism is improved to be more exception-friendly (#3017, #2860).
  • Cancellation from flat* operators that leverage multiple coroutines is no longer propagated upstream (#2964).
  • SharedFlow.collect now returns Nothing (#2789, #2502).
  • DisposableHandle is now fun interface, and corresponding inline extension is removed (#2790).
  • FlowCollector is now fun interface, and corresponding inline extension is removed (#3047).
  • Deprecation level of all previously deprecated signatures is raised (#3024).
  • The version file is shipped with each JAR as a resource (#2941).
  • Unhandled exceptions on K/N are passed to the standard library function processUnhandledException (#2981).
  • A direct executor is used for Task callbacks in kotlinx-coroutines-play-services (#2990).
  • Metadata of coroutines artifacts leverages Gradle platform to have all versions of dependencies aligned (#2865).
  • Default CoroutineExceptionHandler is loaded eagerly and does not invoke ServiceLoader on its exception-handling path (#2552).
  • Fixed the R8 rules for ServiceLoader optimization (#2880).
  • Fixed BlockHound integration false-positives (#2894, #2866, #2937).
  • Fixed the exception handler being invoked several times on Android, thanks to @1zaman (#3056).
  • SendChannel.trySendBlocking is now available on Kotlin/Native (#3064).
  • The exception recovery mechanism now uses ClassValue when available (#2997).
  • JNA is updated to 5.9.0 to support Apple M1 (#3001).
  • Obsolete method on internal Delay interface is deprecated (#2979).
  • Support of deprecated CommonPool is removed.
  • @ExperimentalTime is no longer needed for methods that use Duration (#3041).
  • JDK 1.6 is no longer required for building the project (#3043).
  • New version of Dokka is used, fixing the memory leak when building the coroutines and providing brand new reference visuals (https://kotlin.github.io/kotlinx.coroutines/) (#3051, #3054).

1.6.0-RC3

17 Dec 07:11
Compare
Choose a tag to compare
  • Fixed the error in 1.6.0-RC2 because of which Flow.collect couldn't be called due to the @InternalCoroutinesApi annotation (#3082)
  • Fixed some R8 warnings introduced in 1.6.0-RC (#3090)
  • TestCoroutineScheduler now provides a TimeSource with its virtual time via the timeSource property. Thanks @hfhbd! (#3087)

1.6.0-RC2

10 Dec 13:53
Compare
Choose a tag to compare
  • @ExperimentalTime is no longer needed for methods that use Duration (#3041).
  • FlowCollector is now fun interface, and corresponding inline extension is removed (#3047).
  • Fixed the exception handler being invoked several times on Android, thanks to @1zaman (#3056).
  • The deprecated TestCoroutineScope is no longer sealed, to simplify migration from it (#3072).
  • runTest gives more informative errors when it times out waiting for external completion (#3071).
  • SendChannel.trySendBlocking is now available on Kotlin/Native (#3064).
  • Fixed the bug due to which Dispatchers.Main was not used for delay and withTimeout (#3046).
  • JDK 1.6 is no longer required for building the project (#3043).
  • New version of Dokka is used, fixing the memory leak when building the coroutines and providing brand new reference visuals (https://kotlin.github.io/kotlinx.coroutines/) (#3051, #3054).

1.6.0-RC

22 Nov 11:32
3574c2f
Compare
Choose a tag to compare

kotlinx-coroutines-test rework

Dispatchers

  • Introduced CoroutineDispatcher.limitedParallelism that allows obtaining a view of the original dispatcher with limited parallelism (#2919).
  • Dispatchers.IO.limitedParallelism usages ignore the bound on the parallelism level of Dispatchers.IO itself to avoid starvation (#2943).
  • Introduced new Dispatchers.shutdown method for containerized environments (#2558).
  • newSingleThreadContext and newFixedThreadPoolContext are promoted to delicate API (#2919).

Breaking changes

  • When racing with cancellation, the future builder no longer reports unhandled exceptions into the global CoroutineExceptionHandler. Thanks @vadimsemenov! (#2774, #2791).
  • Mutex.onLock is deprecated for removal (#2794).
  • Dispatchers.Main is now used as the default source of time for delay and withTimeout when present(#2972).
    • To opt-out from this behaviour, kotlinx.coroutines.main.delay system property can be set to false.
  • Java target of coroutines build is now 8 instead of 6 (#1589).

Bug fixes and improvements

  • Kotlin is updated to 1.6.0.
  • Kotlin/Native new memory model is now supported in regular builds of coroutines conditionally depending on whether kotlin.native.binary.memoryModel is enabled (#2914).
  • Introduced CopyableThreadContextElement for mutable context elements shared among multiple coroutines. Thanks @yorickhenning! (#2839 ).
  • transformWhile, awaitClose, ProducerScope, merge, runningFold, runingReduce, and scan are promoted to stable API (#2971).
  • SharedFlow.subscriptionCount no longer conflates incoming updates and gives all subscribers a chance to observe a short-lived subscription (#2488, #2863, #2871).
  • Flow exception transparency mechanism is improved to be more exception-friendly (#3017, #2860).
  • Cancellation from flat* operators that leverage multiple coroutines is no longer propagated upstream (#2964).
  • SharedFlow.collect now returns Nothing (#2789, #2502).
  • FlowCollector is now fun interface, and corresponding inline extension is removed (#2790).
  • Deprecation level of all previously deprecated signatures is raised (#3024).
  • The version file is shipped with each JAR as a resource (#2941).
  • Unhandled exceptions on K/N are passed to the standard library function processUnhandledException (#2981).
  • A direct executor is used for Task callbacks in kotlinx-coroutines-play-services (#2990).
  • Metadata of coroutines artifacts leverages Gradle platform to have all versions of dependencies aligned (#2865).
  • Default CoroutineExceptionHandler is loaded eagerly and does not invoke ServiceLoader on its exception-handling path (#2552).
  • Fixed the R8 rules for ServiceLoader optimization (#2880).
  • Fixed BlockHound integration false-positives (#2894, #2866, #2937).
  • The exception recovery mechanism now uses ClassValue when available (#2997).
  • JNA is updated to 5.9.0 to support Apple M1 (#3001).
  • Obsolete method on internal Delay interface is deprecated (#2979).
  • Support of deprecated CommonPool is removed.

1.5.2

02 Sep 09:52
46c0026
Compare
Choose a tag to compare
  • Kotlin is updated to 1.5.30.
  • New native targets for Apple Silicon are introduced.
  • Fixed a bug when onUndeliveredElement was incorrectly called on properly received elements on JS (#2826).
  • Fixed Dispatchers.Default on React Native, it now fully relies on setTimeout instead of stub process.nextTick. Thanks to @Legion2 (#2843).
  • Optimizations of Mutex implementation (#2581).
  • Mutex implementation is made completely lock-free as stated (#2590).
  • Various documentation and guides improvements. Thanks to @MasoodFallahpoor and @pihanya.