Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
GIDGoogleUserwrote its access, refresh and ID tokens one property at a time - as a result, readers could see a mix of old & new tokens.Behaviour change (in the CHANGELOG):
accessToken,refreshToken,idTokenare now notified when any of the three changes. KVO observers run while the user's lock is held.The second behaviour change is an intentional tradeoff. The suggestion here was to send the KVO outside of the lock. That would mean out-of-order delivery could occur between any concurrent updates, and notifications be sent out-of-order. Sending outside of the lock would also mean that observers who ask KVO for the old value would get the new one. The only way for us to guarantee that there is no chance of deadlock; KVO freshness is correct; and notifications are delivered in-order would be to implement a manual notification queue.
Given that a deadlock would only occur when an observer is synchronously waiting on another thread that is also updating that same user; and that this behaviour has been present on the login path for some time; I judged that amount of manual machinery as not worth the tradeoff. Very willing to revisit in the future.