From 94bcfb71a26683f6ff769d153acbd8919ce49c6f Mon Sep 17 00:00:00 2001 From: Amy Nichol Date: Wed, 22 Sep 2021 01:10:21 -0700 Subject: [PATCH] Fix - ReconnectingWebSocket race condition mClosed Summary: Changelog : [Internal] Use synchronized blocks to avoid race conditions surrounding mClosed. Reviewed By: makovkastar Differential Revision: D31019994 fbshipit-source-id: 48793bd3bea98224d8df344bc4fc8771b517cf72 --- .../ReconnectingWebSocket.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/ReconnectingWebSocket.java b/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/ReconnectingWebSocket.java index 69a417078f9..527bc812075 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/ReconnectingWebSocket.java +++ b/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/ReconnectingWebSocket.java @@ -66,8 +66,10 @@ public final class ReconnectingWebSocket extends WebSocketListener { } public void connect() { - if (mClosed) { - throw new IllegalStateException("Can't connect closed client"); + synchronized (this) { + if (mClosed) { + throw new IllegalStateException("Can't connect closed client"); + } } Request request = new Request.Builder().url(mUrl).build(); @@ -82,8 +84,10 @@ public final class ReconnectingWebSocket extends WebSocketListener { } private void reconnect() { - if (mClosed) { - throw new IllegalStateException("Can't reconnect closed client"); + synchronized (this) { + if (mClosed) { + throw new IllegalStateException("Can't reconnect closed client"); + } } if (!mSuppressConnectionErrors) { @@ -102,8 +106,10 @@ public final class ReconnectingWebSocket extends WebSocketListener { } public void closeQuietly() { - mClosed = true; - closeWebSocketQuietly(); + synchronized (this) { + mClosed = true; + closeWebSocketQuietly(); + } mMessageCallback = null; if (mConnectionCallback != null) {