You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(browser-utils): Ensure web vital client hooks unsubscribe correctly (#17272)
So this was a fun one to track down 😅
In our standalone span web vitals code, we register multiple client
hooks to listen e.g. for `afterStartPageloadSpan` events. This hook will
only fire once (by design), so we want to unsbscribe from it afterwards.
Howerver, we register two callbacks (one for LCP, once for CLS). Because
we used to unsubscribe synchronously from within the client hook
callback, we synchronously removed the callback from the client's hooks
array. This synchronous array mutation (shrinking) caused the second
callback to no longer be executed.
This surfaced by the LCP span being sent but the CLS span not being
sent, due to the CLS span's hook callback no longer being called.
This PR fixes this incorrect unsubscription by deferring the
unsubscription calls to the next tick. This way, the array mutation no
longer happens synchronously and all remaining callback hooks are
invoked correctly.
If you're confused by this, rest assured, I was too 😅 Happy to explain
better/in-person on request :D
closes
https://linear.app/getsentry/issue/JS-811/investigate-missing-standalone-cls-spans-in-latest-sdk-versions
0 commit comments