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
This commit is contained in:
Amy Nichol 2021-09-22 01:10:21 -07:00 коммит произвёл Facebook GitHub Bot
Родитель e20335a2ac
Коммит 94bcfb71a2
1 изменённых файлов: 12 добавлений и 6 удалений

Просмотреть файл

@ -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) {