chore(deps): update coroutines to v1.6.1
This MR contains the following updates:
Package | Update | Change |
---|---|---|
org.jetbrains.kotlinx:kotlinx-coroutines-android | minor |
1.4.2 -> 1.6.1
|
org.jetbrains.kotlinx:kotlinx-coroutines-core | minor |
1.4.2 -> 1.6.1
|
Release Notes
Kotlin/kotlinx.coroutines
v1.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, #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 throwingClassCastException
(#3223). -
CoroutineContext
is added to the exception printed to the defaultCoroutineExceptionHandler
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.
v1.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, #1609, #2379, #1749, #1204, #1390, #1222, #1395, #1881, #1910, #1772, #1626, #1742, #2082, #2102, #2405, #2462 ).
- 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 ofDispatchers.IO
itself to avoid starvation (#2943). - Introduced new
Dispatchers.shutdown
method for containerized environments (#2558). -
newSingleThreadContext
andnewFixedThreadPoolContext
are promoted to delicate API (#2919).
Breaking changes
- When racing with cancellation, the
future
builder no longer reports unhandled exceptions into the globalCoroutineExceptionHandler
. Thanks @vadimsemenov! (#2774, #2791). -
Mutex.onLock
is deprecated for removal (#2794). -
Dispatchers.Main
is now used as the default source of time fordelay
andwithTimeout
when present(#2972).- To opt-out from this behaviour,
kotlinx.coroutines.main.delay
system property can be set tofalse
.
- To opt-out from this behaviour,
- 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
, andscan
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 returnsNothing
(#2789, #2502). -
DisposableHandle
is nowfun interface
, and corresponding inline extension is removed (#2790). -
FlowCollector
is nowfun 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 inkotlinx-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 invokeServiceLoader
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 useDuration
(#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).
Changelog relative to version 1.6.0-RC3
- Restored MPP binary compatibility on K/JS and K/N (#3104).
- Fixed Dispatchers.Main not being fully initialized on Android and Swing (#3101).
v1.5.2
- Kotlin is updated to 1.5.30.
- New native targets for Apple Silicon are introduced.
- Fixed a bug when
onUndeliveredElement
was incorrectly called on a properly received elements on JS (#2826). - Fixed
Dispatchers.Default
on React Native, it now fully relies onsetTimeout
instead of stubprocess.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.
v1.5.1
- Atomic
update
,getAndUpdate
, andupdateAndGet
operations ofMutableStateFlow
(#2720). -
Executor.asCoroutineDispatcher
implementation improvements (#2601):- If the target executor is
ScheduledExecutorService
, then itsschedule
API is used for time-related coroutine operations. -
RemoveOnCancelPolicy
is now part of the public contract.
- If the target executor is
- Introduced overloads for
Task.asDeferred
andTask.await
that acceptCancellationTokenSource
for bidirectional cancellation (#2527). - Reactive streams are updated to
1.0.3
(#2740). -
CopyableThrowable
is allowed to modify the exception message during stacktrace recovery (#1931). -
CoroutineDispatcher.releaseInterceptedContinuation
is now afinal
method (#2785). - Closing a Handler underlying
Handler.asCoroutineDispatcher
now causes the dispatched coroutines to be canceled onDispatchers.IO (#​2778)
. - Kotlin is updated to 1.5.20.
- Fixed a spurious
ClassCastException
inreleaseInterceptedContinuation
andIllegalStateException
fromtryReleaseClaimedContinuation
(#2736, #2768). - Fixed inconsistent exception message during stacktrace recovery for non-suspending channel iterators (#2749).
- Fixed linear stack usage for
CompletableFuture.asDeferred
when the target future has a long chain of listeners (#2730). - Any exceptions from
CoroutineDispatcher.isDispatchNeeded
are now considered as fatal and are propagated to the caller (#2733). - Internal
DebugProbesKt
(used in the debugger implementation) are moved fromdebug
tocore
module.
v1.5.0
Note that this is a full changelog relative to 1.4.3 version. Changelog relative to 1.5.0-RC can be found in the end.
Channels API
- Major channels API rework (#330, #974). Existing
offer
,poll
, andsendBlocking
methods are deprecated, internalreceiveCatching
andonReceiveCatching
removed,receiveOrNull
andonReceiveOrNull
are completely deprecated. Previously deprecatedSendChannel.isFull
declaration is removed. Channel operators deprecated withERROR
are nowHIDDEN
. - New methods
receiveCatching
,onReceiveCatching
trySend
,tryReceive
, andtrySendBlocking
along with the new result typeChannelResult
are introduced. They provide better type safety, are less error-prone, and have a consistent future-proof naming scheme. The full rationale behind this change can be found here. -
BroadcastChannel
andConflatedBroadcastChannel
are marked asObsoleteCoroutinesApi
in the favor orSharedFlow
andStateFlow
. The migration scheme can be found in their documentation. These classes will be deprecated in the next major release. -
callbackFlow
andchannelFlow
are promoted to stable API.
Reactive integrations
- All existing API in modules
kotlinx-coroutines-rx2
,kotlinx-coroutines-rx3
,kotlinx-coroutines-reactive
,kotlinx-coroutines-reactor
, andkotlinx-coroutines-jdk9
were revisited and promoted to stable (#2545). -
publish
is no longer allowed to emitnull
values (#2646). - Misleading
awaitSingleOr*
functions onPublisher
type are deprecated (#2591). -
MaybeSource.await
is deprecated in the favor ofawaitSingle
, additional lint functions forMono
are added in order to prevent ambiguousPublisher
usages (#2628, #1587). -
ContextView
support inkotlinx-coroutines-reactor
(#2575). - All reactive builders no longer ignore inner cancellation exceptions preventing their completion (#2262, #2646).
-
MaybeSource.collect
andMaybe.collect
properly finish when they are completed without a value (#2617). - All exceptions are now consistently handled according to reactive specification, whether they are considered 'fatal' or not by reactive frameworks (#2646).
Other improvements
- Kotlin version is upgraded to 1.5.0 and JVM target is updated to 1.8.
-
Flow.last
andFlow.lastOrNull
operators (#2246). -
Flow.runningFold
operator (#2641). -
CoroutinesTimeout
rule for JUnit5 (#2197). - Internals of
Job
andAbstractCoroutine
was reworked, resulting in smaller code size, less memory footprint, and better performance (#2513, #2512). -
CancellationException
from Kotlin standard library is used for cancellation on Koltin/JS and Kotlin/Native (#2638). - Introduced new
DelicateCoroutinesApi
annotation that warns users about potential target API pitfalls and suggests studying API's documentation first. The only delicate API right now isGlobalScope
(#2637). - Fixed bug introduced in
1.4.3
whenkotlinx-coroutines-core.jar
triggered IDEA debugger failure (#2619). - Fixed memory leak of
ChildHandlerNode
with reusable continuations (#2564). - Various documentation improvements (#2555, #2589, #2592, #2583, #2437, #2616, #2633, #2560).
Changelog relative to version 1.5.0-RC
- Fail-fast during
emitAll
called from cancelledonCompletion
operator (#2700). - Flows returned by
stateIn
/shareIn
keep strong reference to sharing job (#2557). - Rename internal
TimeSource
toAbstractTimeSource
due to import issues (#2691). - Reverted the change that triggered IDEA coroutines debugger crash (#2695, reverted #2291).
-
watchosX64
target support for Kotlin/Native (#2524). - Various documentation fixes and improvements.
v1.4.3
General changes
- Thread context is properly preserved and restored for coroutines without
ThreadContextElement
(#985) -
ThreadContextElement
s are now restored in the opposite order from update (#2195) - Improved performance of combine with 4 parameters, thanks to @alexvanyo (#2419)
- Debug agent sanitizer leaves at least one frame with source location (#1437)
- Update Reactor version in
kotlinx-coroutines-reactor
to3.4.1
, thanks to @sokomishalov (#2432) -
callInPlace
contract added toReceiveChannel.consume
(#941) -
CoroutineStart.UNDISPATCHED
promoted to stable API (#1393) - Kotlin updated to 1.4.30
-
kotlinx.coroutines
are now released directly to MavenCentral - Reduced the size of
DispatchedCoroutine
by a field - Internal class
TimeSource
renamed toSchedulerTimeSource
to prevent wildcard import issues (#2537)
Bug fixes
- Fixed the problem that prevented implementation via delegation for
Job
interface (#2423) - Fixed incorrect ProGuard rules that allowed shrinking volatile felds (#1564)
- Fixed
await
/asDeferred
forMinimalStage
implementations in jdk8 module (#2456) - Fixed bug when
onUndeliveredElement
wasn't called for unlimited channels (#2435) - Fixed a bug when
ListenableFuture.isCancelled
returned fromasListenableFuture
could have thrown an exception, thanks to @vadimsemenov (#2421) - Coroutine in
callbackFlow
andproduce
is properly cancelled when the channel was closed separately (#2506)
Configuration
-
If you want to rebase/retry this MR, click this checkbox.
This MR has been generated by Renovate Bot.