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.
0.12: Kotlin 1.1.0 release and reactive utilities
Switched to Kotlin version 1.1.0 release.
Reworked and updated utilities for
Reactive Streams,
Rx 1.x, and
Rx 2.x with library-specific
coroutine builders, suspending functions, converters and iteration support.
LinkedListChannel with unlimited buffer (offer always succeeds).
onLock select clause and an optional owner parameter in all Mutex functions.
selectUnbiased function.
actor coroutine builder.
Couple more examples for "Shared mutable state and concurrency" section and
"Channels are fair" section with ping-pong table example
in coroutines guide.
Switched to Kotlin version 1.1.0-beta-22 (republished version).
Removed currentCoroutineContext and related thread-locals without replacement.
Explicitly pass coroutine context around if needed.
lazyDefer(context) {...} coroutine builder and LazyDeferred interface are introduced.
The default behaviour of all coroutine dispatchers is changed to always schedule execution of new coroutine
for later in this thread or thread pool. Correspondingly, CoroutineDispatcher.isDispatchNeeded function
has a default implementation that returns true.
NonCancellable context is introduced.
Performance optimizations for cancellable continuations (fewer objects created).
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.
Version 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.
The old API is deprecated for removal, but the new API is based on the similar concepts (README), and the migration path is designed to be graceful: migration guide.
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).
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).
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps kotlinx-coroutines-core from 1.6.0-native-mt to 1.6.1-native-mt.
Release notes
Sourced from kotlinx-coroutines-core's releases.
... (truncated)
Changelog
Sourced from kotlinx-coroutines-core's changelog.
... (truncated)
Commits
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)