@@ -117,9 +117,6 @@ class ChromeProxyService implements VmServiceInterface {
117
117
final _resumeAfterRestartEventsController =
118
118
StreamController <String >.broadcast ();
119
119
120
- final _resumeAfterHotReloadEventsController =
121
- StreamController <Completer <void >>.broadcast ();
122
-
123
120
/// A global stream of resume events for hot restart.
124
121
///
125
122
/// The values in the stream are the isolates IDs for the resume event.
@@ -130,16 +127,11 @@ class ChromeProxyService implements VmServiceInterface {
130
127
Stream <String > get resumeAfterRestartEventsStream =>
131
128
_resumeAfterRestartEventsController.stream;
132
129
133
- /// A global stream of resume events for hot reload.
134
- ///
135
- /// The values in the stream are [Completer] s that should be completed after
136
- /// finishing the hot reload.
130
+ /// If non-null, a resume event should await the result of this after resuming
131
+ /// execution.
137
132
///
138
- /// IMPORTANT: This should only be listened to during a hot reload. The
139
- /// debugger ignores any resume events as long as there is a subscriber to
140
- /// this stream.
141
- Stream <Completer <void >> get resumeAfterHotReloadEventsStream =>
142
- _resumeAfterHotReloadEventsController.stream;
133
+ /// This is used to complete a hot reload.
134
+ Future <void > Function ()? _finishHotReloadOnResume;
143
135
144
136
final _logger = Logger ('ChromeProxyService' );
145
137
@@ -1223,22 +1215,17 @@ class ChromeProxyService implements VmServiceInterface {
1223
1215
// If `pause_isolates_on_start` is enabled, pause and then the reload
1224
1216
// should finish later after the client removes breakpoints, reregisters
1225
1217
// breakpoints, and resumes.
1226
- StreamSubscription <Completer <void >>? resumeEventsSubscription;
1227
- resumeEventsSubscription = resumeAfterHotReloadEventsStream.listen ((
1228
- Completer <void > completer,
1229
- ) async {
1218
+ _finishHotReloadOnResume = () async {
1230
1219
// Client finished setting breakpoints, called resume, and now the
1231
1220
// execution has resumed. Finish the hot reload so we start executing
1232
1221
// the new code instead.
1233
- await resumeEventsSubscription! .cancel ();
1234
1222
_logger.info ('Issuing \$ dartHotReloadEndDwds request' );
1235
1223
await inspector.jsEvaluate (
1236
1224
'\$ dartHotReloadEndDwds();' ,
1237
1225
awaitPromise: true ,
1238
1226
);
1239
1227
_logger.info ('\$ dartHotReloadEndDwds request complete.' );
1240
- completer.complete ();
1241
- });
1228
+ };
1242
1229
1243
1230
// Pause and wait for the pause to occur before managing breakpoints.
1244
1231
final pausedEvent = _firstStreamEvent (
@@ -1350,11 +1337,10 @@ class ChromeProxyService implements VmServiceInterface {
1350
1337
}, (result) => DwdsEvent .resume (step));
1351
1338
}
1352
1339
1353
- if (_resumeAfterHotReloadEventsController.hasListener ) {
1340
+ if (_finishHotReloadOnResume != null ) {
1354
1341
await resumeWhenAppHasStarted ();
1355
- final completer = Completer <void >();
1356
- _resumeAfterHotReloadEventsController.add (completer);
1357
- await completer.future;
1342
+ await _finishHotReloadOnResume !();
1343
+ _finishHotReloadOnResume = null ;
1358
1344
return Success ();
1359
1345
}
1360
1346
if (inspector.appConnection.isStarted) {
0 commit comments