This is a patch release with an important fix to the SharedFlow implementation.
SharedFlow: Fix scenario with concurrent emitters and cancellation of a subscriber (#2359, thanks to @vehovsky for the bug report).
1.4.0
Improvements
StateFlow, SharedFlow and corresponding operators are promoted to stable API (#2316).
Flow.debounce operator with timeout selector based on each individual element is added (#1216, thanks to @mkano9!).
CoroutineContext.job extension property is introduced (#2159).
Flow.combine operator is reworked:
Complete fairness is maintained for single-threaded dispatchers.
Its performance is improved, depending on the use-case, by at least 50% (#2296).
Quadratic complexity depending on the number of upstream flows is eliminated (#2296).
crossinline and inline-heavy internals are removed, fixing sporadic SIGSEGV on Mediatek Android devices (#1683, #1743).
Flow.zip operator performance is improved by 40%.
Various API has been promoted to stable or its deprecation level has been raised (#2316).
Bug fixes
Suspendable stateIn operator propagates exception to the caller when upstream fails to produce initial value (#2329).
Fix SharedFlow with replay for subscribers working at different speed (#2325).
Do not fail debug agent installation when security manager does not provide access to system properties (#2311).
Cancelled lazy coroutines are properly cleaned up from debug agent output (#2294).
BlockHound false-positives are correctly filtered out (#2302, #2190, #2303).
Potential crash during a race between cancellation and upstream in Observable.asFlow is fixed (#2104, #2299, thanks to @LouisCAD and @drinkthestars).
1.4.0-M1
Breaking changes
The concept of atomic cancellation in channels is removed. All operations in channels
and corresponding Flow operators are cancellable in non-atomic way (#1813).
If CoroutineDispatcher throws RejectedExecutionException, cancel current Job and schedule its execution to Dispatchers.IO (#2003).
CancellableContinuation.invokeOnCancellation is invoked if the continuation was cancelled while its resume has been dispatched (#1915).
Flow.singleOrNull operator is aligned with standard library and does not longer throw IllegalStateException on multiple values (#2289).
New experimental features
SharedFlow primitive for managing hot sources of events with support of various subscription mechanisms, replay logs and buffering (#2034).
Flow.shareIn and Flow.stateIn operators to transform cold instances of flow to hot SharedFlow and StateFlow respectively (#2047).
Other
Support leak-free closeable resources transfer via onUndeliveredElement in channels (#1936).
Changed ABI in reactive integrations for Java interoperability (#2182).
Fixed ProGuard rules for kotlinx-coroutines-core (#2046, #2266).
Lint settings were added to Flow to avoid accidental capturing of outer CoroutineScope for cancellation check (#2038).
This is a patch release with an important fix to the SharedFlow implementation.
SharedFlow: Fix scenario with concurrent emitters and cancellation of subscriber (#2359, thanks to @vehovsky for the bug report).
Version 1.4.0
Improvements
StateFlow, SharedFlow and corresponding operators are promoted to stable API (#2316).
Flow.debounce operator with timeout selector based on each individual element is added (#1216, thanks to @mkano9!).
CoroutineContext.job extension property is introduced (#2159).
Flow.combine operator is reworked:
Complete fairness is maintained for single-threaded dispatchers.
Its performance is improved, depending on the use-case, by at least 50% (#2296).
Quadratic complexity depending on the number of upstream flows is eliminated (#2296).
crossinline and inline-heavy internals are removed, fixing sporadic SIGSEGV on Mediatek Android devices (#1683, #1743).
Flow.zip operator performance is improved by 40%.
Various API has been promoted to stable or its deprecation level has been raised (#2316).
Bug fixes
Suspendable stateIn operator propagates exception to the caller when upstream fails to produce initial value (#2329).
Fix SharedFlow with replay for subscribers working at different speed (#2325).
Do not fail debug agent installation when security manager does not provide access to system properties (#2311).
Cancelled lazy coroutines are properly cleaned up from debug agent output (#2294).
BlockHound false-positives are correctly filtered out (#2302, #2190, #2303).
Potential crash during a race between cancellation and upstream in Observable.asFlow is fixed (#2104, #2299, thanks to @LouisCAD and @drinkthestars).
Version 1.4.0-M1
Breaking changes
The concept of atomic cancellation in channels is removed. All operations in channels
and corresponding Flow operators are cancellable in non-atomic way (#1813).
If CoroutineDispatcher throws RejectedExecutionException, cancel current Job and schedule its execution to Dispatchers.IO (#2003).
CancellableContinuation.invokeOnCancellation is invoked if the continuation was cancelled while its resume has been dispatched (#1915).
Flow.singleOrNull operator is aligned with standard library and does not longer throw IllegalStateException on multiple values (#2289).
New experimental features
SharedFlow primitive for managing hot sources of events with support of various subscription mechanisms, replay logs and buffering (#2034).
Flow.shareIn and Flow.stateIn operators to transform cold instances of flow to hot SharedFlow and StateFlow respectively (#2047).
Other
Support leak-free closeable resources transfer via onUndeliveredElement in channels (#1936).
Changed ABI in reactive integrations for Java interoperability (#2182).
Fixed ProGuard rules for kotlinx-coroutines-core (#2046, #2266).
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)
- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language
- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language
- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language
- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language
- `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme
Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com):
- Update frequency (including time of day and day of week)
- Pull request limits (per update run and/or open at any time)
- Out-of-range updates (receive only lockfile updates, if desired)
- Security updates (receive only security updates, if desired)
Bumps kotlinx-coroutines-core from 1.3.9 to 1.4.1.
Release notes
Sourced from kotlinx-coroutines-core's releases.
Changelog
Sourced from kotlinx-coroutines-core's changelog.
Commits
c35ce7e
Version 1.4.1e710048
SharedFlow: Fix scenario with concurrent emitters and cancellation of subscri...4ea4078
Merge pull request #2337 from Kotlin/version-1.4.000da1ac
Acknowledge external contributorsf1e35a0
Version 1.4.0727dd58
Merge remote-tracking branch 'origin/master' into develope16eb9d
Update experimental declarations (#2316)92db4e1
Add debounce with selector and kotlin.time (#2336)53f007f
Fix SharedFlow with replay for subscribers working at different speed (#2325)45ba58e
Fix BlockHound false positives (#2331)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) - `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language - `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language - `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language - `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language - `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com): - Update frequency (including time of day and day of week) - Pull request limits (per update run and/or open at any time) - Out-of-range updates (receive only lockfile updates, if desired) - Security updates (receive only security updates, if desired)