@@ -95,6 +95,7 @@ public open class DevServerHelper(
95
95
private val packagerStatusCheck: PackagerStatusCheck = PackagerStatusCheck (client)
96
96
private val packageName: String = applicationContext.packageName
97
97
98
+ private var packagerConnectionLock: Boolean = false ;
98
99
private var packagerClient: JSPackagerClient ? = null
99
100
private var inspectorPackagerConnection: IInspectorPackagerConnection ? = null
100
101
@@ -143,10 +144,11 @@ public open class DevServerHelper(
143
144
get() = settings.isJSMinifyEnabled
144
145
145
146
public fun openPackagerConnection (clientId : String? , commandListener : PackagerCommandListener ) {
146
- if (packagerClient != null ) {
147
+ if (packagerClient != null || packagerConnectionLock ) {
147
148
FLog .w(ReactConstants .TAG , " Packager connection already open, nooping." )
148
149
return
149
150
}
151
+ packagerConnectionLock = true ;
150
152
object : AsyncTask <Void , Void , Void >() {
151
153
@Deprecated(" This needs to be rewritten to not use AsyncTasks" )
152
154
override fun doInBackground (vararg backgroundParams : Void ): Void ? {
@@ -183,20 +185,41 @@ public open class DevServerHelper(
183
185
clientId, packagerConnectionSettings, handlers, onPackagerConnectedCallback)
184
186
.apply { init () }
185
187
186
- return null
188
+ return packagerClient
189
+ }
190
+
191
+ override fun onPostExecute (packagerClient : JSPackagerClient ) {
192
+ UiThreadUtil .assertOnUiThread()
193
+ mPackagerClient = packagerClient
194
+ mPackagerConnectionLock = false
187
195
}
188
196
}
189
197
.executeOnExecutor(AsyncTask .THREAD_POOL_EXECUTOR )
190
198
}
191
199
192
200
public fun closePackagerConnection () {
201
+ if (packagerConnectionLock) {
202
+ FLog .w(ReactConstants .TAG , " Packager connection lock acquired, cannot close current connection." );
203
+ return ;
204
+ }
205
+ packagerConnectionLock = true ;
206
+
193
207
object : AsyncTask <Void , Void , Void >() {
194
208
@Deprecated(" This class needs to be rewritten to don't use AsyncTasks" )
195
209
override fun doInBackground (vararg params : Void ): Void ? {
196
- packagerClient?.close()
210
+ if (params.isNotEmpty() && params[0 ] != null ) {
211
+ val packagerClient = params[0 ]
212
+ packagerClient?.close()
213
+ }
197
214
packagerClient = null
198
215
return null
199
216
}
217
+
218
+ override fun onPostExecute (result : Void ? ) {
219
+ UiThreadUtil .assertOnUiThread()
220
+ mPackagerClient = null
221
+ mPackagerConnectionLock = false
222
+ }
200
223
}
201
224
.executeOnExecutor(AsyncTask .THREAD_POOL_EXECUTOR )
202
225
}
0 commit comments