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 NPE race in NettyResponseFuture.cancel (#2042) (#2088)
Fixes#2042
This is a typical TOCTOU (time-of-check/time-of-use) race
https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use.
The NPE was occurring because the channel field could be set to null by
another thread between the check and its use:
if (channel != null) { // time-of-check
Channels.setDiscard(channel); // time-of-use
Channels.silentlyCloseChannel(channel);
}
By copying channel into a local variable in one atomic read, we ensure
that—even if another thread changes the field—the local reference
remains valid.
P.S. It is hard to write a deterministic test that fails consistently,
so this PR only includes the code fix.
---------
Co-authored-by: prat <[email protected]>
0 commit comments