Skip to content

Commit ece1c23

Browse files
esamelsonKudo
authored andcommitted
Update DevServerHelper.java
1 parent 394ecd6 commit ece1c23

File tree

1 file changed

+35
-12
lines changed

1 file changed

+35
-12
lines changed

ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
import com.facebook.common.logging.FLog;
1414
import com.facebook.infer.annotation.Assertions;
1515
import com.facebook.react.bridge.ReactContext;
16+
import com.facebook.react.bridge.UiThreadUtil;
17+
import com.facebook.react.R;
1618
import com.facebook.react.common.ReactConstants;
1719
import com.facebook.react.common.build.ReactBuildConfig;
1820
import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener;
@@ -113,6 +115,7 @@ public String typeID() {
113115
private final PackagerStatusCheck mPackagerStatusCheck;
114116
private final String mPackageName;
115117

118+
private boolean mPackagerConnectionLock = false;
116119
private @Nullable JSPackagerClient mPackagerClient;
117120
private @Nullable InspectorPackagerConnection mInspectorPackagerConnection;
118121
private InspectorPackagerConnection.BundleStatusProvider mBundlerStatusProvider;
@@ -136,13 +139,14 @@ public DevServerHelper(
136139

137140
public void openPackagerConnection(
138141
final String clientId, final PackagerCommandListener commandListener) {
139-
if (mPackagerClient != null) {
142+
if (mPackagerClient != null || mPackagerConnectionLock) {
140143
FLog.w(ReactConstants.TAG, "Packager connection already open, nooping.");
141144
return;
142145
}
143-
new AsyncTask<Void, Void, Void>() {
146+
mPackagerConnectionLock = true;
147+
new AsyncTask<Void, Void, JSPackagerClient>() {
144148
@Override
145-
protected Void doInBackground(Void... backgroundParams) {
149+
protected JSPackagerClient doInBackground(Void... backgroundParams) {
146150
Map<String, RequestHandler> handlers = new HashMap<>();
147151
handlers.put(
148152
"reload",
@@ -187,30 +191,49 @@ public void onDisconnected() {
187191
}
188192
};
189193

190-
mPackagerClient =
194+
JSPackagerClient packagerClient =
191195
new JSPackagerClient(
192196
clientId,
193197
mSettings.getPackagerConnectionSettings(),
194198
handlers,
195199
onPackagerConnectedCallback);
196-
mPackagerClient.init();
200+
packagerClient.init();
197201

198-
return null;
202+
return packagerClient;
203+
}
204+
205+
@Override
206+
protected void onPostExecute(JSPackagerClient packagerClient) {
207+
UiThreadUtil.assertOnUiThread();
208+
mPackagerClient = packagerClient;
209+
mPackagerConnectionLock = false;
199210
}
200211
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
201212
}
202213

203214
public void closePackagerConnection() {
204-
new AsyncTask<Void, Void, Void>() {
215+
if (mPackagerConnectionLock) {
216+
FLog.w(ReactConstants.TAG, "Packager connection lock acquired, cannot close current connection.");
217+
return;
218+
}
219+
mPackagerConnectionLock = true;
220+
new AsyncTask<JSPackagerClient, Void, Void>() {
205221
@Override
206-
protected Void doInBackground(Void... params) {
207-
if (mPackagerClient != null) {
208-
mPackagerClient.close();
209-
mPackagerClient = null;
222+
protected Void doInBackground(JSPackagerClient... params) {
223+
if (params.length > 0 && params[0] != null) {
224+
JSPackagerClient packagerClient = params[0];
225+
packagerClient.close();
210226
}
211227
return null;
212228
}
213-
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
229+
230+
@Override
231+
protected void onPostExecute(Void result) {
232+
UiThreadUtil.assertOnUiThread();
233+
mPackagerClient = null;
234+
mPackagerConnectionLock = false;
235+
}
236+
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, mPackagerClient);
214237
}
215238

216239
public void openInspectorConnection() {

0 commit comments

Comments
 (0)