[!WARNING]
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
Release Notes
Kotlin/kotlinx.coroutines (org.jetbrains.kotlinx:kotlinx-coroutines-core)
### [`v1.9.0`](https://redirect.github.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-190)
[Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.8.1...1.9.0)
##### Features
- Wasm/WASI target support ([#4064](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4064)). Thanks, [@igoriakovlev](https://redirect.github.com/igoriakovlev)!
- `limitedParallelism` now optionally accepts the name of the dispatcher view for easier debugging ([#4023](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4023)).
- No longer initialize `Dispatchers.IO` on the JVM when other standard dispatchers are accessed ([#4166](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4166)). Thanks, [@metalhead8816](https://redirect.github.com/metalhead8816)!
- Introduced the `Flow.chunked(size: Int): Flow>` operator that groups emitted values into groups of the given size ([#1290](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1290)).
- Closeable dispatchers are instances of `AutoCloseable` now ([#4123](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4123)).
##### Fixes
- Calling `hasNext` on a `Channel`'s iterator is idempotent ([#4065](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4065)). Thanks, [@gitpaxultek](https://redirect.github.com/gitpaxultek)!
- `CoroutineScope()` created without an explicit dispatcher uses `Dispatchers.Default` on Native ([#4074](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4074)). Thanks, [@whyoleg](https://redirect.github.com/whyoleg)!
- Fixed a bug that prevented non-Android `Dispatchers.Main` from initializing when the Firebase dependency is used ([#3914](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3914)).
- Ensured a more intuitive ordering of tasks in `runBlocking` ([#4134](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4134)).
- Forbid casting a `Mutex` to `Semaphore` ([#4176](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4176)).
- Worked around a stack overflow that may occur when calling `asDeferred` on a `Future` many times ([#4156](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4156)).
##### Deprecations and promotions
- Advanced the deprecation levels for `BroadcastChannel`-based API ([#4197](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4197)).
- Advanced the deprecation levels for the old `kotlinx-coroutines-test` API ([#4198](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4198)).
- Deprecated `Job.cancelFutureOnCompletion` ([#4173](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4173)).
- Promoted `CoroutineDispatcher.limitedParallelism` to stable ([#3864](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3864)).
- Promoted `CoroutineStart.ATOMIC` from `ExperimentalCoroutinesApi` to `DelicateCoroutinesApi` ([#4169](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4169)).
- Promoted `CancellableContinuation.resume` with an `onCancellation` lambda to stable, providing extra arguments to the lambda ([#4088](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4088)).
- Marked the classes and interfaces that are not supposed to be inherited from with the new `InternalForInheritanceCoroutinesApi` opt-in ([#3770](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3770)).
- Marked the classes and interfaces inheriting from which is not stable with the new `ExperimentalForInheritanceCoroutinesApi` opt-in ([#3770](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3770)).
##### Other
- Kotlin was updated to 2.0 ([#4137](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4137)).
- Reworked the documentation for `CoroutineStart` and `Channel`-based API ([#4147](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4147), [#4148](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4148), [#4167](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4167)). Thanks, [@globsterg](https://redirect.github.com/globsterg)!
- Simplified the internal implementation of `Job` ([#4053](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4053)).
- Small tweaks, fixes, and documentation improvements.
### [`v1.8.1`](https://redirect.github.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-181)
[Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.8.0...1.8.1)
- Remove the `@ExperimentalTime` annotation from usages of `TimeSource` ([#4046](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4046)). Thanks, [@hfhbd](https://redirect.github.com/hfhbd)!
- Introduce a workaround for an Android bug that caused an occasional `NullPointerException` when setting the `StateFlow` value on old Android devices ([#3820](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3820)).
- No longer use `kotlin.random.Random` as part of `Dispatchers.Default` and `Dispatchers.IO` initialization ([#4051](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4051)).
- `Flow.timeout` throws the exception with which the channel was closed ([#4071](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4071)).
- Small tweaks and documentation fixes.
##### Changelog relative to version 1.8.1-Beta
- `Flow.timeout` throws the exception with which the channel was closed ([#4071](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4071)).
- Small documentation fixes.
### [`v1.8.0`](https://redirect.github.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-180)
[Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.7.3...1.8.0)
- Implement the library for the Web Assembly (Wasm) for JavaScript ([#3713](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3713)). Thanks [@igoriakovlev](https://redirect.github.com/igoriakovlev)!
- Major Kotlin version update: was 1.8.20, became 1.9.21.
- On Android, ensure that `Dispatchers.Main != Dispatchers.Main.immediate` ([#3545](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3545), [#3963](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3963)).
- Fixed a bug that caused `Flow` operators that limit cancel the upstream flow to forget that they were already finished if there is another such operator upstream ([#4035](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4035), [#4038](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4038))
- `kotlinx-coroutines-debug` is published with the correct Java 9 module info ([#3944](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3944)).
- `kotlinx-coroutines-debug` no longer requires manually setting `DebugProbes.enableCoroutineCreationStackTraces` to `false`, it's the default ([#3783](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3783)).
- `kotlinx-coroutines-test`: set the default timeout of `runTest` to 60 seconds, added the ability to configure it on the JVM with the `kotlinx.coroutines.test.default_timeout=10s` ([#3800](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3800)).
- `kotlinx-coroutines-test`: fixed a bug that could lead to not all uncaught exceptions being reported after some tests failed ([#3800](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3800)).
- `delay(Duration)` rounds nanoseconds up to whole milliseconds and not down ([#3920](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3920)). Thanks [@kevincianfarini](https://redirect.github.com/kevincianfarini)!
- `Dispatchers.Default` and the default thread for background work are guaranteed to use the same context classloader as the object containing it them ([#3832](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3832)).
- It is guaranteed that by the time `SharedFlow.collect` suspends for the first time, it's registered as a subscriber for that `SharedFlow` ([#3885](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3885)). Before, it was also true, but not documented.
- Atomicfu version is updated to 0.23.1, and Kotlin/Native atomic transformations are enabled, reducing the footprint of coroutine-heavy code ([#3954](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3954)).
- Added a workaround for miscompilation of `withLock` on JS ([#3881](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3881)). Thanks [@CLOVIS-AI](https://redirect.github.com/CLOVIS-AI)!
- Small tweaks and documentation fixes.
##### Changelog relative to version 1.8.0-RC2
- `kotlinx-coroutines-debug` no longer requires manually setting `DebugProbes.enableCoroutineCreationStackTraces` to `false`, it's the default ([#3783](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3783)).
- Fixed a bug that caused `Flow` operators that limit cancel the upstream flow to forget that they were already finished if there is another such operator upstream ([#4035](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4035), [#4038](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4038))
- Small documentation fixes.
### [`v1.7.3`](https://redirect.github.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-173)
[Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.7.2...1.7.3)
- Disabled the publication of the multiplatform library metadata for the old (1.6 and earlier) KMP Gradle plugin ([#3809](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3809)).
- Fixed a bug introduced in 1.7.2 that disabled the coroutine debugger in IDEA ([#3822](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3822)).
### [`v1.7.2`](https://redirect.github.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-172)
[Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.7.1...1.7.2)
##### Bug fixes and improvements
- Coroutines debugger no longer keeps track of coroutines with empty coroutine context ([#3782](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3782)).
- `CopyableThreadContextElement` now properly copies an element when crossing the coroutine boundary in `flowOn` ([#3787](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3787)). Thanks [@wanyingd1996](https://redirect.github.com/wanyingd1996)!
- Coroutine timeouts no longer prevent K/N `newSingleThreadContext` from closing ([#3768](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3768)).
- A non-linearizability in `Mutex` during `tryLock`/`unlock` sequence with owners is fixed ([#3745](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3745)).
- Atomicfu version is updated to 0.21.0.
### [`v1.7.1`](https://redirect.github.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-171)
[Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.7.0...1.7.1)
##### Bug fixes and improvements
- Special characters in coroutine names in JSON dumps are supported ([#3747](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3747))
- The binary compatibility of the experimental overload of `runTest` is restored ([#3673](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3673))
- Channels that don't use `onUndeliveredElement` now allocate less memory ([#3646](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3646))
### [`v1.7.0`](https://redirect.github.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-170)
[Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.6.4...1.7.0)
##### Core API significant improvements
- New `Channel` implementation with significant performance improvements across the API ([#3621](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3621)).
- New `select` operator implementation: faster, more lightweight, and more robust ([#3020](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3020)).
- `Mutex` and `Semaphore` now share the same underlying data structure ([#3020](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3020)).
- `Dispatchers.IO` is added to K/N ([#3205](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3205))
- `newFixedThreadPool` and `Dispatchers.Default` implementations on K/N were wholly rewritten to support graceful growth under load ([#3595](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3595)).
- `kotlinx-coroutines-test` rework:
- Add the `timeout` parameter to `runTest` for the whole-test timeout, 10 seconds by default ([#3270](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3270)). This replaces the configuration of quiescence timeouts, which is now deprecated ([#3603](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3603)).
- The `withTimeout` exception messages indicate if the timeout used the virtual time ([#3588](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3588)).
- `TestCoroutineScheduler`, `runTest`, and `TestScope` API are promoted to stable ([#3622](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3622)).
- `runTest` now also fails if there were uncaught exceptions in coroutines not inherited from the test coroutine ([#1205](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1205)).
##### Breaking changes
- Old K/N memory model is no longer supported ([#3375](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3375)).
- New generic upper bounds were added to reactive integration API where the language since 1.8.0 dictates ([#3393](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3393)).
- `kotlinx-coroutines-core` and `kotlinx-coroutines-jdk8` artifacts were merged into a single artifact ([#3268](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3268)).
- Artificial stackframes in stacktrace recovery no longer contain the `\b` symbol and are now navigable in IDE and supplied with proper documentation ([#2291](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2291)).
- `CoroutineContext.isActive` returns `true` for contexts without any job in them ([#3300](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3300)).
##### Bug fixes and improvements
- Kotlin version is updated to 1.8.20
- Atomicfu version is updated to 0.20.2.
- `JavaFx` version is updated to 17.0.2 in `kotlinx-coroutines-javafx` ([#3671](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3671))..
- JPMS is supported ([#2237](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2237)). Thanks [@lion7](https://redirect.github.com/lion7)!
- `BroadcastChannel` and all the corresponding API are deprecated ([#2680](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2680)).
- Added all supported K/N targets ([#3601](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3601), [#812](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/812), [#855](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/855)).
- K/N `Dispatchers.Default` is backed by the number of threads equal to the number of available cores ([#3366](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3366)).
- Fixed an issue where some coroutines' internal exceptions were not properly serializable ([#3328](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3328)).
- Introduced `Job.parent` API ([#3201](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3201)).
- Fixed a bug when `TestScheduler` leaked cancelled jobs ([#3398](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3398)).
- `TestScope.timeSource` now provides comparable time marks ([#3617](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3617)). Thanks [@hfhbd](https://redirect.github.com/hfhbd)!
- Fixed an issue when cancelled `withTimeout` handles were preserved in JS runtime ([#3440](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3440)).
- Ensure `awaitFrame` only awaits a single frame when used from the main looper ([#3432](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3432)). Thanks [@pablobaxter](https://redirect.github.com/pablobaxter)!
- Obsolete `Class-Path` attribute was removed from `kotlinx-coroutines-debug.jar` manifest ([#3361](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3361)).
- Fixed a bug when `updateThreadContext` operated on the parent context ([#3411](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3411)).
- Added new `Flow.filterIsInstance` extension ([#3240](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3240)).
- `Dispatchers.Default` thread name prefixes are now configurable with system property ([#3231](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3231)).
- Added `Flow.timeout` operator as `@FlowPreview` ([#2624](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2624)). Thanks [@pablobaxter](https://redirect.github.com/pablobaxter)!
- Improved the performance of the `future` builder in case of exceptions ([#3475](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3475)). Thanks [@He-Pin](https://redirect.github.com/He-Pin)!
- `Mono.awaitSingleOrNull` now waits for the `onComplete` signal ([#3487](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3487)).
- `Channel.isClosedForSend` and `Channel.isClosedForReceive` are promoted from experimental to delicate ([#3448](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3448)).
- Fixed a data race in native `EventLoop` ([#3547](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3547)).
- `Dispatchers.IO.limitedParallelism(valueLargerThanIOSize)` no longer creates an additional wrapper ([#3442](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3442)). Thanks [@dovchinnikov](https://redirect.github.com/dovchinnikov)!
- Various `@FlowPreview` and `@ExperimentalCoroutinesApi` are promoted to experimental and stable respectively ([#3542](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3542), [#3097](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3097), [#3548](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3548)).
- Performance improvements in `Dispatchers.Default` and `Dispatchers.IO` ([#3416](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3416), [#3418](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3418)).
- Fixed a bug when internal `suspendCancellableCoroutineReusable` might have hanged ([#3613](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3613)).
- Introduced internal API to process events in the current system dispatcher ([#3439](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3439)).
- Global `CoroutineExceptionHandler` is no longer invoked in case of unprocessed `future` failure ([#3452](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3452)).
- Performance improvements and reduced thread-local pressure for the `withContext` operator ([#3592](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3592)).
- Improved performance of `DebugProbes` ([#3527](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3527)).
- Fixed a bug when the coroutine debugger might have detected the state of a coroutine incorrectly ([#3193](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3193)).
- `CoroutineDispatcher.asExecutor()` runs tasks without dispatching if the dispatcher is unconfined ([#3683](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3683)). Thanks [@odedniv](https://redirect.github.com/odedniv)!
- `SharedFlow.toMutableList` and `SharedFlow.toSet` lints are introduced ([#3706](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3706)).
- `Channel.invokeOnClose` is promoted to stable API ([#3358](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3358)).
- Improved lock contention in `Dispatchers.Default` and `Dispatchers.IO` during the startup phase ([#3652](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3652)).
- Fixed a bug that led to threads oversubscription in `Dispatchers.Default` ([#3642](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3642)).
- Fixed a bug that allowed `limitedParallelism` to perform dispatches even after the underlying dispatcher was closed ([#3672](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3672)).
- Fixed a bug that prevented stacktrace recovery when the exception's constructor from `cause` was selected ([#3714](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3714)).
- Improved sanitizing of stracktrace-recovered traces ([#3714](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3714)).
- Introduced an internal flag to disable uncaught exceptions reporting in tests as a temporary migration mechanism ([#3736](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3736)).
- Various documentation improvements and fixes.
Changelog for previous versions may be found in [CHANGES_UP_TO\_1.7.md](CHANGES_UP_TO\_1.7.md)
### [`v1.6.4`](https://redirect.github.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.4)
[Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.6.3...1.6.4)
- Added `TestScope.backgroundScope` for launching coroutines that perform work in the background and need to be cancelled at the end of the test ([#3287](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/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](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3334)).
- Fixed the `Publisher.await` functions in `kotlinx-coroutines-reactive` not ensuring that the `Subscriber` methods are invoked serially ([#3360](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3360)). Thank you, [@EgorKulbachka](https://redirect.github.com/EgorKulbachka)!
- Fixed a memory leak in `withTimeout` on K/N with the new memory model ([#3351](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3351)).
- Added the guarantee that all `Throwable` implementations in the core library are serializable ([#3328](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3328)).
- Moved the documentation to ([#3342](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3342)).
- Various documentation improvements.
### [`v1.6.3`](https://redirect.github.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.3)
[Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.6.2...1.6.3)
- Updated atomicfu version to 0.17.3 ([#3321](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3321)), fixing the projects using this library with JS IR failing to build ([#3305](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3305)).
### [`v1.6.2`](https://redirect.github.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.2)
[Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.6.1...1.6.2)
- Fixed a bug with `ThreadLocalElement` not being correctly updated when the most outer `suspend` function was called directly without `kotlinx.coroutines` ([#2930](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2930)).
- Fixed multiple data races: one that might have been affecting `runBlocking` event loop, and a benign data race in `Mutex` ([#3250](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3250), [#3251](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3251)).
- Obsolete `TestCoroutineContext` is removed, which fixes the `kotlinx-coroutines-test` JPMS package being split between `kotlinx-coroutines-core` and `kotlinx-coroutines-test` ([#3218](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3218)).
- Updated the ProGuard rules to further shrink the size of the resulting DEX file with coroutines ([#3111](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3111), [#3263](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3263)). Thanks, [@agrieve](https://redirect.github.com/agrieve)!
- Atomicfu is updated to `0.17.2`, which includes a more efficient and robust JS IR transformer ([#3255](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3255)).
- Kotlin is updated to `1.6.21`, Gradle version is updated to `7.4.2` ([#3281](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3281)). Thanks, [@wojtek-kalicinski](https://redirect.github.com/wojtek-kalicinski)!
- Various documentation improvements.
### [`v1.6.1`](https://redirect.github.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.1)
[Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.6.0...1.6.1)
- Rollback of time-related functions dispatching on `Dispatchers.Main`.
This behavior was introduced in 1.6.0 and then found inconvenient and erroneous ([#3106](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3106), [#3113](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3113)).
- Reworked the newly-introduced `CopyableThreadContextElement` to solve issues uncovered after the initial release ([#3227](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3227)).
- Fixed a bug with `ThreadLocalElement` not being properly updated in racy scenarios ([#2930](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2930)).
- Reverted eager loading of default `CoroutineExceptionHandler` that triggered ANR on some devices ([#3180](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3180)).
- New API to convert a `CoroutineDispatcher` to a Rx scheduler ([#968](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/968), [#548](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/548)). Thanks [@recheej](https://redirect.github.com/recheej)!
- Fixed a memory leak with the very last element emitted from `flow` builder being retained in memory ([#3197](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3197)).
- Fixed a bug with `limitedParallelism` on K/N with new memory model throwing `ClassCastException` ([#3223](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3223)).
- `CoroutineContext` is added to the exception printed to the default `CoroutineExceptionHandler` to improve debuggability ([#3153](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3153)).
- Static memory consumption of `Dispatchers.Default` was significantly reduced ([#3137](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3137)).
- Updated slf4j version in `kotlinx-coroutines-slf4j` from 1.7.25 to 1.7.32.
### [`v1.6.0`](https://redirect.github.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.0)
[Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.5.2...1.6.0)
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
- `kotlinx-coroutines-test` became a multiplatform library usable from K/JVM, K/JS, and K/N.
- Its API was completely reworked to address long-standing issues with consistency, structured concurrency and correctness ([#1203](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1203), [#1609](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1609), [#2379](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2379), [#1749](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1749), [#1204](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1204), [#1390](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1390), [#1222](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1222), [#1395](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1395), [#1881](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1881), [#1910](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1910), [#1772](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1772), [#1626](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1626), [#1742](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1742), [#2082](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2082), [#2102](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2102), [#2405](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2405), [#2462](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2462)
).
- The old API is deprecated for removal, but the new API is based on the similar concepts ([README](kotlinx-coroutines-test/README.md)), and the migration path is designed to be graceful: [migration guide](kotlinx-coroutines-test/MIGRATION.md).
##### Dispatchers
- Introduced `CoroutineDispatcher.limitedParallelism` that allows obtaining a view of the original dispatcher with limited parallelism ([#2919](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2919)).
- `Dispatchers.IO.limitedParallelism` usages ignore the bound on the parallelism level of `Dispatchers.IO` itself to avoid starvation ([#2943](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2943)).
- Introduced new `Dispatchers.shutdown` method for containerized environments ([#2558](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2558)).
- `newSingleThreadContext` and `newFixedThreadPoolContext` are promoted to delicate API ([#2919](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2919)).
##### Breaking changes
- When racing with cancellation, the `future` builder no longer reports unhandled exceptions into the global `CoroutineExceptionHandler`. Thanks [@vadimsemenov](https://redirect.github.com/vadimsemenov)! ([#2774](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2774), [#2791](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2791)).
- `Mutex.onLock` is deprecated for removal ([#2794](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2794)).
- `Dispatchers.Main` is now used as the default source of time for `delay` and `withTimeout` when present ([#2972](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/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](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/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](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3107) for the additional details.
##### Bug fixes and improvements
- Kotlin is updated to 1.6.0.
- Kotlin/Native [new memory model](https://blog.jetbrains.com/kotlin/2021/08/try-the-new-kotlin-native-memory-manager-development-preview/) is now supported in regular builds of coroutines conditionally depending on whether `kotlin.native.binary.memoryModel` is enabled ([#2914](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2914)).
- Introduced `CopyableThreadContextElement` for mutable context elements shared among multiple coroutines. Thanks [@yorickhenning](https://redirect.github.com/yorickhenning)! ([#2893](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2893)).
- `transformWhile`, `awaitClose`, `ProducerScope`, `merge`, `runningFold`, `runingReduce`, and `scan` are promoted to stable API ([#2971](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2971)).
- `SharedFlow.subscriptionCount` no longer conflates incoming updates and gives all subscribers a chance to observe a short-lived subscription ([#2488](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2488), [#2863](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2863), [#2871](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2871)).
- `Flow` exception transparency mechanism is improved to be more exception-friendly ([#3017](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3017), [#2860](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2860)).
- Cancellation from `flat*` operators that leverage multiple coroutines is no longer propagated upstream ([#2964](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2964)).
- `SharedFlow.collect` now returns `Nothing` ([#2789](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2789), [#2502](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2502)).
- `DisposableHandle` is now `fun interface`, and corresponding inline extension is removed ([#2790](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2790)).
- `FlowCollector` is now `fun interface`, and corresponding inline extension is removed ([#3047](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3047)).
- Deprecation level of all previously deprecated signatures is raised ([#3024](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3024)).
- The version file is shipped with each JAR as a resource ([#2941](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2941)).
- Unhandled exceptions on K/N are passed to the standard library function `processUnhandledException` ([#2981](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2981)).
- A direct executor is used for `Task` callbacks in `kotlinx-coroutines-play-services` ([#2990](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2990)).
- Metadata of coroutines artifacts leverages Gradle platform to have all versions of dependencies aligned ([#2865](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2865)).
- Default `CoroutineExceptionHandler` is loaded eagerly and does not invoke `ServiceLoader` on its exception-handling path ([#2552](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2552)).
- Fixed the R8 rules for `ServiceLoader` optimization ([#2880](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2880)).
- Fixed BlockHound integration false-positives ([#2894](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2894), [#2866](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2866), [#2937](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2937)).
- Fixed the exception handler being invoked several times on Android, thanks to [@1zaman](https://redirect.github.com/1zaman) ([#3056](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3056)).
- `SendChannel.trySendBlocking` is now available on Kotlin/Native ([#3064](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3064)).
- The exception recovery mechanism now uses `ClassValue` when available ([#2997](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2997)).
- JNA is updated to 5.9.0 to support Apple M1 ([#3001](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3001)).
- Obsolete method on internal `Delay` interface is deprecated ([#2979](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2979)).
- Support of deprecated `CommonPool` is removed.
- `@ExperimentalTime` is no longer needed for methods that use `Duration` ([#3041](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3041)).
- JDK 1.6 is no longer required for building the project ([#3043](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/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](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3051), [#3054](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3054)).
Configuration
📅 Schedule: Branch creation - "after 5pm on the 2nd day of the month" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
â™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
[ ] If you want to rebase/retry this PR, check this box
This PR contains the following updates:
1.5.2
->1.9.0
Release Notes
Kotlin/kotlinx.coroutines (org.jetbrains.kotlinx:kotlinx-coroutines-core)
### [`v1.9.0`](https://redirect.github.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-190) [Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.8.1...1.9.0) ##### Features - Wasm/WASI target support ([#4064](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4064)). Thanks, [@igoriakovlev](https://redirect.github.com/igoriakovlev)! - `limitedParallelism` now optionally accepts the name of the dispatcher view for easier debugging ([#4023](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4023)). - No longer initialize `Dispatchers.IO` on the JVM when other standard dispatchers are accessed ([#4166](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4166)). Thanks, [@metalhead8816](https://redirect.github.com/metalhead8816)! - Introduced the `Flow>` operator that groups emitted values into groups of the given size ([#1290](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1290)). - Closeable dispatchers are instances of `AutoCloseable` now ([#4123](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4123)). ##### Fixes - Calling `hasNext` on a `Channel`'s iterator is idempotent ([#4065](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4065)). Thanks, [@gitpaxultek](https://redirect.github.com/gitpaxultek)! - `CoroutineScope()` created without an explicit dispatcher uses `Dispatchers.Default` on Native ([#4074](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4074)). Thanks, [@whyoleg](https://redirect.github.com/whyoleg)! - Fixed a bug that prevented non-Android `Dispatchers.Main` from initializing when the Firebase dependency is used ([#3914](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3914)). - Ensured a more intuitive ordering of tasks in `runBlocking` ([#4134](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4134)). - Forbid casting a `Mutex` to `Semaphore` ([#4176](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4176)). - Worked around a stack overflow that may occur when calling `asDeferred` on a `Future` many times ([#4156](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4156)). ##### Deprecations and promotions - Advanced the deprecation levels for `BroadcastChannel`-based API ([#4197](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4197)). - Advanced the deprecation levels for the old `kotlinx-coroutines-test` API ([#4198](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4198)). - Deprecated `Job.cancelFutureOnCompletion` ([#4173](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4173)). - Promoted `CoroutineDispatcher.limitedParallelism` to stable ([#3864](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3864)). - Promoted `CoroutineStart.ATOMIC` from `ExperimentalCoroutinesApi` to `DelicateCoroutinesApi` ([#4169](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4169)). - Promoted `CancellableContinuation.resume` with an `onCancellation` lambda to stable, providing extra arguments to the lambda ([#4088](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4088)). - Marked the classes and interfaces that are not supposed to be inherited from with the new `InternalForInheritanceCoroutinesApi` opt-in ([#3770](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3770)). - Marked the classes and interfaces inheriting from which is not stable with the new `ExperimentalForInheritanceCoroutinesApi` opt-in ([#3770](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3770)). ##### Other - Kotlin was updated to 2.0 ([#4137](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4137)). - Reworked the documentation for `CoroutineStart` and `Channel`-based API ([#4147](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4147), [#4148](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4148), [#4167](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4167)). Thanks, [@globsterg](https://redirect.github.com/globsterg)! - Simplified the internal implementation of `Job` ([#4053](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4053)). - Small tweaks, fixes, and documentation improvements. ### [`v1.8.1`](https://redirect.github.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-181) [Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.8.0...1.8.1) - Remove the `@ExperimentalTime` annotation from usages of `TimeSource` ([#4046](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4046)). Thanks, [@hfhbd](https://redirect.github.com/hfhbd)! - Introduce a workaround for an Android bug that caused an occasional `NullPointerException` when setting the `StateFlow` value on old Android devices ([#3820](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3820)). - No longer use `kotlin.random.Random` as part of `Dispatchers.Default` and `Dispatchers.IO` initialization ([#4051](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4051)). - `Flow.timeout` throws the exception with which the channel was closed ([#4071](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4071)). - Small tweaks and documentation fixes. ##### Changelog relative to version 1.8.1-Beta - `Flow.timeout` throws the exception with which the channel was closed ([#4071](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4071)). - Small documentation fixes. ### [`v1.8.0`](https://redirect.github.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-180) [Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.7.3...1.8.0) - Implement the library for the Web Assembly (Wasm) for JavaScript ([#3713](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3713)). Thanks [@igoriakovlev](https://redirect.github.com/igoriakovlev)! - Major Kotlin version update: was 1.8.20, became 1.9.21. - On Android, ensure that `Dispatchers.Main != Dispatchers.Main.immediate` ([#3545](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3545), [#3963](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3963)). - Fixed a bug that caused `Flow` operators that limit cancel the upstream flow to forget that they were already finished if there is another such operator upstream ([#4035](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4035), [#4038](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4038)) - `kotlinx-coroutines-debug` is published with the correct Java 9 module info ([#3944](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3944)). - `kotlinx-coroutines-debug` no longer requires manually setting `DebugProbes.enableCoroutineCreationStackTraces` to `false`, it's the default ([#3783](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3783)). - `kotlinx-coroutines-test`: set the default timeout of `runTest` to 60 seconds, added the ability to configure it on the JVM with the `kotlinx.coroutines.test.default_timeout=10s` ([#3800](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3800)). - `kotlinx-coroutines-test`: fixed a bug that could lead to not all uncaught exceptions being reported after some tests failed ([#3800](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3800)). - `delay(Duration)` rounds nanoseconds up to whole milliseconds and not down ([#3920](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3920)). Thanks [@kevincianfarini](https://redirect.github.com/kevincianfarini)! - `Dispatchers.Default` and the default thread for background work are guaranteed to use the same context classloader as the object containing it them ([#3832](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3832)). - It is guaranteed that by the time `SharedFlow.collect` suspends for the first time, it's registered as a subscriber for that `SharedFlow` ([#3885](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3885)). Before, it was also true, but not documented. - Atomicfu version is updated to 0.23.1, and Kotlin/Native atomic transformations are enabled, reducing the footprint of coroutine-heavy code ([#3954](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3954)). - Added a workaround for miscompilation of `withLock` on JS ([#3881](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3881)). Thanks [@CLOVIS-AI](https://redirect.github.com/CLOVIS-AI)! - Small tweaks and documentation fixes. ##### Changelog relative to version 1.8.0-RC2 - `kotlinx-coroutines-debug` no longer requires manually setting `DebugProbes.enableCoroutineCreationStackTraces` to `false`, it's the default ([#3783](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3783)). - Fixed a bug that caused `Flow` operators that limit cancel the upstream flow to forget that they were already finished if there is another such operator upstream ([#4035](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4035), [#4038](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4038)) - Small documentation fixes. ### [`v1.7.3`](https://redirect.github.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-173) [Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.7.2...1.7.3) - Disabled the publication of the multiplatform library metadata for the old (1.6 and earlier) KMP Gradle plugin ([#3809](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3809)). - Fixed a bug introduced in 1.7.2 that disabled the coroutine debugger in IDEA ([#3822](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3822)). ### [`v1.7.2`](https://redirect.github.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-172) [Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.7.1...1.7.2) ##### Bug fixes and improvements - Coroutines debugger no longer keeps track of coroutines with empty coroutine context ([#3782](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3782)). - `CopyableThreadContextElement` now properly copies an element when crossing the coroutine boundary in `flowOn` ([#3787](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3787)). Thanks [@wanyingd1996](https://redirect.github.com/wanyingd1996)! - Coroutine timeouts no longer prevent K/N `newSingleThreadContext` from closing ([#3768](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3768)). - A non-linearizability in `Mutex` during `tryLock`/`unlock` sequence with owners is fixed ([#3745](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3745)). - Atomicfu version is updated to 0.21.0. ### [`v1.7.1`](https://redirect.github.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-171) [Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.7.0...1.7.1) ##### Bug fixes and improvements - Special characters in coroutine names in JSON dumps are supported ([#3747](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3747)) - The binary compatibility of the experimental overload of `runTest` is restored ([#3673](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3673)) - Channels that don't use `onUndeliveredElement` now allocate less memory ([#3646](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3646)) ### [`v1.7.0`](https://redirect.github.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-170) [Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.6.4...1.7.0) ##### Core API significant improvements - New `Channel` implementation with significant performance improvements across the API ([#3621](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3621)). - New `select` operator implementation: faster, more lightweight, and more robust ([#3020](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3020)). - `Mutex` and `Semaphore` now share the same underlying data structure ([#3020](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3020)). - `Dispatchers.IO` is added to K/N ([#3205](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3205)) - `newFixedThreadPool` and `Dispatchers.Default` implementations on K/N were wholly rewritten to support graceful growth under load ([#3595](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3595)). - `kotlinx-coroutines-test` rework: - Add the `timeout` parameter to `runTest` for the whole-test timeout, 10 seconds by default ([#3270](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3270)). This replaces the configuration of quiescence timeouts, which is now deprecated ([#3603](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3603)). - The `withTimeout` exception messages indicate if the timeout used the virtual time ([#3588](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3588)). - `TestCoroutineScheduler`, `runTest`, and `TestScope` API are promoted to stable ([#3622](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3622)). - `runTest` now also fails if there were uncaught exceptions in coroutines not inherited from the test coroutine ([#1205](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1205)). ##### Breaking changes - Old K/N memory model is no longer supported ([#3375](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3375)). - New generic upper bounds were added to reactive integration API where the language since 1.8.0 dictates ([#3393](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3393)). - `kotlinx-coroutines-core` and `kotlinx-coroutines-jdk8` artifacts were merged into a single artifact ([#3268](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3268)). - Artificial stackframes in stacktrace recovery no longer contain the `\b` symbol and are now navigable in IDE and supplied with proper documentation ([#2291](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2291)). - `CoroutineContext.isActive` returns `true` for contexts without any job in them ([#3300](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3300)). ##### Bug fixes and improvements - Kotlin version is updated to 1.8.20 - Atomicfu version is updated to 0.20.2. - `JavaFx` version is updated to 17.0.2 in `kotlinx-coroutines-javafx` ([#3671](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3671)).. - JPMS is supported ([#2237](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2237)). Thanks [@lion7](https://redirect.github.com/lion7)! - `BroadcastChannel` and all the corresponding API are deprecated ([#2680](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2680)). - Added all supported K/N targets ([#3601](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3601), [#812](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/812), [#855](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/855)). - K/N `Dispatchers.Default` is backed by the number of threads equal to the number of available cores ([#3366](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3366)). - Fixed an issue where some coroutines' internal exceptions were not properly serializable ([#3328](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3328)). - Introduced `Job.parent` API ([#3201](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3201)). - Fixed a bug when `TestScheduler` leaked cancelled jobs ([#3398](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3398)). - `TestScope.timeSource` now provides comparable time marks ([#3617](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3617)). Thanks [@hfhbd](https://redirect.github.com/hfhbd)! - Fixed an issue when cancelled `withTimeout` handles were preserved in JS runtime ([#3440](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3440)). - Ensure `awaitFrame` only awaits a single frame when used from the main looper ([#3432](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3432)). Thanks [@pablobaxter](https://redirect.github.com/pablobaxter)! - Obsolete `Class-Path` attribute was removed from `kotlinx-coroutines-debug.jar` manifest ([#3361](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3361)). - Fixed a bug when `updateThreadContext` operated on the parent context ([#3411](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3411)). - Added new `Flow.filterIsInstance` extension ([#3240](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3240)). - `Dispatchers.Default` thread name prefixes are now configurable with system property ([#3231](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3231)). - Added `Flow.timeout` operator as `@FlowPreview` ([#2624](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2624)). Thanks [@pablobaxter](https://redirect.github.com/pablobaxter)! - Improved the performance of the `future` builder in case of exceptions ([#3475](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3475)). Thanks [@He-Pin](https://redirect.github.com/He-Pin)! - `Mono.awaitSingleOrNull` now waits for the `onComplete` signal ([#3487](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3487)). - `Channel.isClosedForSend` and `Channel.isClosedForReceive` are promoted from experimental to delicate ([#3448](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3448)). - Fixed a data race in native `EventLoop` ([#3547](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3547)). - `Dispatchers.IO.limitedParallelism(valueLargerThanIOSize)` no longer creates an additional wrapper ([#3442](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3442)). Thanks [@dovchinnikov](https://redirect.github.com/dovchinnikov)! - Various `@FlowPreview` and `@ExperimentalCoroutinesApi` are promoted to experimental and stable respectively ([#3542](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3542), [#3097](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3097), [#3548](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3548)). - Performance improvements in `Dispatchers.Default` and `Dispatchers.IO` ([#3416](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3416), [#3418](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3418)). - Fixed a bug when internal `suspendCancellableCoroutineReusable` might have hanged ([#3613](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3613)). - Introduced internal API to process events in the current system dispatcher ([#3439](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3439)). - Global `CoroutineExceptionHandler` is no longer invoked in case of unprocessed `future` failure ([#3452](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3452)). - Performance improvements and reduced thread-local pressure for the `withContext` operator ([#3592](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3592)). - Improved performance of `DebugProbes` ([#3527](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3527)). - Fixed a bug when the coroutine debugger might have detected the state of a coroutine incorrectly ([#3193](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3193)). - `CoroutineDispatcher.asExecutor()` runs tasks without dispatching if the dispatcher is unconfined ([#3683](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3683)). Thanks [@odedniv](https://redirect.github.com/odedniv)! - `SharedFlow.toMutableList` and `SharedFlow.toSet` lints are introduced ([#3706](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3706)). - `Channel.invokeOnClose` is promoted to stable API ([#3358](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3358)). - Improved lock contention in `Dispatchers.Default` and `Dispatchers.IO` during the startup phase ([#3652](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3652)). - Fixed a bug that led to threads oversubscription in `Dispatchers.Default` ([#3642](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3642)). - Fixed a bug that allowed `limitedParallelism` to perform dispatches even after the underlying dispatcher was closed ([#3672](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3672)). - Fixed a bug that prevented stacktrace recovery when the exception's constructor from `cause` was selected ([#3714](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3714)). - Improved sanitizing of stracktrace-recovered traces ([#3714](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3714)). - Introduced an internal flag to disable uncaught exceptions reporting in tests as a temporary migration mechanism ([#3736](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3736)). - Various documentation improvements and fixes. Changelog for previous versions may be found in [CHANGES_UP_TO\_1.7.md](CHANGES_UP_TO\_1.7.md) ### [`v1.6.4`](https://redirect.github.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.4) [Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.6.3...1.6.4) - Added `TestScope.backgroundScope` for launching coroutines that perform work in the background and need to be cancelled at the end of the test ([#3287](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/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](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3334)). - Fixed the `Publisher.await` functions in `kotlinx-coroutines-reactive` not ensuring that the `Subscriber` methods are invoked serially ([#3360](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3360)). Thank you, [@EgorKulbachka](https://redirect.github.com/EgorKulbachka)! - Fixed a memory leak in `withTimeout` on K/N with the new memory model ([#3351](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3351)). - Added the guarantee that all `Throwable` implementations in the core library are serializable ([#3328](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3328)). - Moved the documentation to ([#3342](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3342)).
- Various documentation improvements.
### [`v1.6.3`](https://redirect.github.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.3)
[Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.6.2...1.6.3)
- Updated atomicfu version to 0.17.3 ([#3321](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3321)), fixing the projects using this library with JS IR failing to build ([#3305](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3305)).
### [`v1.6.2`](https://redirect.github.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.2)
[Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.6.1...1.6.2)
- Fixed a bug with `ThreadLocalElement` not being correctly updated when the most outer `suspend` function was called directly without `kotlinx.coroutines` ([#2930](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2930)).
- Fixed multiple data races: one that might have been affecting `runBlocking` event loop, and a benign data race in `Mutex` ([#3250](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3250), [#3251](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3251)).
- Obsolete `TestCoroutineContext` is removed, which fixes the `kotlinx-coroutines-test` JPMS package being split between `kotlinx-coroutines-core` and `kotlinx-coroutines-test` ([#3218](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3218)).
- Updated the ProGuard rules to further shrink the size of the resulting DEX file with coroutines ([#3111](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3111), [#3263](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3263)). Thanks, [@agrieve](https://redirect.github.com/agrieve)!
- Atomicfu is updated to `0.17.2`, which includes a more efficient and robust JS IR transformer ([#3255](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3255)).
- Kotlin is updated to `1.6.21`, Gradle version is updated to `7.4.2` ([#3281](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3281)). Thanks, [@wojtek-kalicinski](https://redirect.github.com/wojtek-kalicinski)!
- Various documentation improvements.
### [`v1.6.1`](https://redirect.github.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.1)
[Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.6.0...1.6.1)
- Rollback of time-related functions dispatching on `Dispatchers.Main`.
This behavior was introduced in 1.6.0 and then found inconvenient and erroneous ([#3106](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3106), [#3113](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3113)).
- Reworked the newly-introduced `CopyableThreadContextElement` to solve issues uncovered after the initial release ([#3227](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3227)).
- Fixed a bug with `ThreadLocalElement` not being properly updated in racy scenarios ([#2930](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2930)).
- Reverted eager loading of default `CoroutineExceptionHandler` that triggered ANR on some devices ([#3180](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3180)).
- New API to convert a `CoroutineDispatcher` to a Rx scheduler ([#968](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/968), [#548](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/548)). Thanks [@recheej](https://redirect.github.com/recheej)!
- Fixed a memory leak with the very last element emitted from `flow` builder being retained in memory ([#3197](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3197)).
- Fixed a bug with `limitedParallelism` on K/N with new memory model throwing `ClassCastException` ([#3223](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3223)).
- `CoroutineContext` is added to the exception printed to the default `CoroutineExceptionHandler` to improve debuggability ([#3153](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3153)).
- Static memory consumption of `Dispatchers.Default` was significantly reduced ([#3137](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3137)).
- Updated slf4j version in `kotlinx-coroutines-slf4j` from 1.7.25 to 1.7.32.
### [`v1.6.0`](https://redirect.github.com/Kotlin/kotlinx.coroutines/releases/tag/1.6.0)
[Compare Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.5.2...1.6.0)
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
- `kotlinx-coroutines-test` became a multiplatform library usable from K/JVM, K/JS, and K/N.
- Its API was completely reworked to address long-standing issues with consistency, structured concurrency and correctness ([#1203](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1203), [#1609](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1609), [#2379](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2379), [#1749](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1749), [#1204](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1204), [#1390](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1390), [#1222](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1222), [#1395](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1395), [#1881](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1881), [#1910](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1910), [#1772](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1772), [#1626](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1626), [#1742](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1742), [#2082](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2082), [#2102](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2102), [#2405](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2405), [#2462](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2462)
).
- The old API is deprecated for removal, but the new API is based on the similar concepts ([README](kotlinx-coroutines-test/README.md)), and the migration path is designed to be graceful: [migration guide](kotlinx-coroutines-test/MIGRATION.md).
##### Dispatchers
- Introduced `CoroutineDispatcher.limitedParallelism` that allows obtaining a view of the original dispatcher with limited parallelism ([#2919](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2919)).
- `Dispatchers.IO.limitedParallelism` usages ignore the bound on the parallelism level of `Dispatchers.IO` itself to avoid starvation ([#2943](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2943)).
- Introduced new `Dispatchers.shutdown` method for containerized environments ([#2558](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2558)).
- `newSingleThreadContext` and `newFixedThreadPoolContext` are promoted to delicate API ([#2919](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2919)).
##### Breaking changes
- When racing with cancellation, the `future` builder no longer reports unhandled exceptions into the global `CoroutineExceptionHandler`. Thanks [@vadimsemenov](https://redirect.github.com/vadimsemenov)! ([#2774](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2774), [#2791](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2791)).
- `Mutex.onLock` is deprecated for removal ([#2794](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2794)).
- `Dispatchers.Main` is now used as the default source of time for `delay` and `withTimeout` when present ([#2972](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/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](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/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](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3107) for the additional details.
##### Bug fixes and improvements
- Kotlin is updated to 1.6.0.
- Kotlin/Native [new memory model](https://blog.jetbrains.com/kotlin/2021/08/try-the-new-kotlin-native-memory-manager-development-preview/) is now supported in regular builds of coroutines conditionally depending on whether `kotlin.native.binary.memoryModel` is enabled ([#2914](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2914)).
- Introduced `CopyableThreadContextElement` for mutable context elements shared among multiple coroutines. Thanks [@yorickhenning](https://redirect.github.com/yorickhenning)! ([#2893](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2893)).
- `transformWhile`, `awaitClose`, `ProducerScope`, `merge`, `runningFold`, `runingReduce`, and `scan` are promoted to stable API ([#2971](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2971)).
- `SharedFlow.subscriptionCount` no longer conflates incoming updates and gives all subscribers a chance to observe a short-lived subscription ([#2488](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2488), [#2863](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2863), [#2871](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2871)).
- `Flow` exception transparency mechanism is improved to be more exception-friendly ([#3017](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3017), [#2860](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2860)).
- Cancellation from `flat*` operators that leverage multiple coroutines is no longer propagated upstream ([#2964](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2964)).
- `SharedFlow.collect` now returns `Nothing` ([#2789](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2789), [#2502](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2502)).
- `DisposableHandle` is now `fun interface`, and corresponding inline extension is removed ([#2790](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2790)).
- `FlowCollector` is now `fun interface`, and corresponding inline extension is removed ([#3047](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3047)).
- Deprecation level of all previously deprecated signatures is raised ([#3024](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3024)).
- The version file is shipped with each JAR as a resource ([#2941](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2941)).
- Unhandled exceptions on K/N are passed to the standard library function `processUnhandledException` ([#2981](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2981)).
- A direct executor is used for `Task` callbacks in `kotlinx-coroutines-play-services` ([#2990](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2990)).
- Metadata of coroutines artifacts leverages Gradle platform to have all versions of dependencies aligned ([#2865](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2865)).
- Default `CoroutineExceptionHandler` is loaded eagerly and does not invoke `ServiceLoader` on its exception-handling path ([#2552](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2552)).
- Fixed the R8 rules for `ServiceLoader` optimization ([#2880](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2880)).
- Fixed BlockHound integration false-positives ([#2894](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2894), [#2866](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2866), [#2937](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2937)).
- Fixed the exception handler being invoked several times on Android, thanks to [@1zaman](https://redirect.github.com/1zaman) ([#3056](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3056)).
- `SendChannel.trySendBlocking` is now available on Kotlin/Native ([#3064](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3064)).
- The exception recovery mechanism now uses `ClassValue` when available ([#2997](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2997)).
- JNA is updated to 5.9.0 to support Apple M1 ([#3001](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3001)).
- Obsolete method on internal `Delay` interface is deprecated ([#2979](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/2979)).
- Support of deprecated `CommonPool` is removed.
- `@ExperimentalTime` is no longer needed for methods that use `Duration` ([#3041](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3041)).
- JDK 1.6 is no longer required for building the project ([#3043](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/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](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3051), [#3054](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3054)).
Configuration
📅 Schedule: Branch creation - "after 5pm on the 2nd day of the month" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
â™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.