@@ -63,15 +63,15 @@ pub enum Event {
63
63
pub struct CtrlTask {
64
64
pub event_receiver : UnboundedReceiver < Event > ,
65
65
execute_task_map : HashMap < DependencyId , ExecuteTask > ,
66
- finish_module_map : HashMap < ModuleIdentifier , UnfinishCounter > ,
66
+ running_module_map : HashMap < ModuleIdentifier , UnfinishCounter > ,
67
67
}
68
68
69
69
impl CtrlTask {
70
70
pub fn new ( event_receiver : UnboundedReceiver < Event > ) -> Self {
71
71
Self {
72
72
event_receiver,
73
73
execute_task_map : Default :: default ( ) ,
74
- finish_module_map : Default :: default ( ) ,
74
+ running_module_map : Default :: default ( ) ,
75
75
}
76
76
}
77
77
}
@@ -87,33 +87,30 @@ impl Task<MakeTaskContext> for CtrlTask {
87
87
match event {
88
88
Event :: StartBuild ( module_identifier) => {
89
89
self
90
- . as_mut ( )
91
- . finish_module_map
90
+ . running_module_map
92
91
. insert ( module_identifier, UnfinishCounter :: new ( ) ) ;
93
92
}
94
93
Event :: FinishDeps ( origin_module_identifier, dep_id, target_module_graph) => {
95
94
if let Some ( target_module_graph) = target_module_graph {
96
- if let Some ( value ) = self . as_ref ( ) . finish_module_map . get ( & target_module_graph) {
97
- if !value . is_finished ( ) {
98
- continue ;
99
- }
95
+ if self . running_module_map . contains_key ( & target_module_graph)
96
+ && Some ( target_module_graph ) != origin_module_identifier
97
+ {
98
+ continue ;
100
99
}
101
100
}
102
101
103
102
// target module finished
104
103
let Some ( origin_module_identifier) = origin_module_identifier else {
105
104
// origin_module_identifier is none means entry dep
106
105
let execute_task = self
107
- . as_mut ( )
108
106
. execute_task_map
109
107
. remove ( & dep_id)
110
108
. expect ( "should have execute task" ) ;
111
109
return Ok ( vec ! [ Box :: new( execute_task) , self ] ) ;
112
110
} ;
113
111
114
112
let value = self
115
- . as_mut ( )
116
- . finish_module_map
113
+ . running_module_map
117
114
. get_mut ( & origin_module_identifier)
118
115
. expect ( "should have counter" ) ;
119
116
value. minus_one ( ) ;
@@ -126,8 +123,7 @@ impl Task<MakeTaskContext> for CtrlTask {
126
123
}
127
124
Event :: FinishModule ( mid, size) => {
128
125
let value = self
129
- . as_mut ( )
130
- . finish_module_map
126
+ . running_module_map
131
127
. get_mut ( & mid)
132
128
. expect ( "should have counter" ) ;
133
129
value. set_unfinished_child_module_count ( size) ;
@@ -191,28 +187,24 @@ impl Task<MakeTaskContext> for FinishModuleTask {
191
187
match event {
192
188
Event :: StartBuild ( module_identifier) => {
193
189
ctrl_task
194
- . as_mut ( )
195
- . finish_module_map
190
+ . running_module_map
196
191
. insert ( module_identifier, UnfinishCounter :: new ( ) ) ;
197
192
}
198
193
Event :: FinishDeps ( origin_module_identifier, dep_id, target_module_graph) => {
199
194
if let Some ( target_module_graph) = target_module_graph {
200
- if let Some ( value ) = ctrl_task
201
- . as_ref ( )
202
- . finish_module_map
203
- . get ( & target_module_graph)
195
+ if ctrl_task
196
+ . running_module_map
197
+ . contains_key ( & target_module_graph )
198
+ && Some ( target_module_graph) != origin_module_identifier
204
199
{
205
- if !value. is_finished ( ) {
206
- continue ;
207
- }
200
+ continue ;
208
201
}
209
202
}
210
203
211
204
// target module finished
212
205
let Some ( origin_module_identifier) = origin_module_identifier else {
213
206
// origin_module_identifier is none means entry dep
214
207
let execute_task = ctrl_task
215
- . as_mut ( )
216
208
. execute_task_map
217
209
. remove ( & dep_id)
218
210
. expect ( "should have execute task" ) ;
@@ -221,8 +213,7 @@ impl Task<MakeTaskContext> for FinishModuleTask {
221
213
} ;
222
214
223
215
let value = ctrl_task
224
- . as_mut ( )
225
- . finish_module_map
216
+ . running_module_map
226
217
. get_mut ( & origin_module_identifier)
227
218
. expect ( "should have counter" ) ;
228
219
value. minus_one ( ) ;
@@ -232,8 +223,7 @@ impl Task<MakeTaskContext> for FinishModuleTask {
232
223
}
233
224
Event :: FinishModule ( mid, size) => {
234
225
let value = ctrl_task
235
- . as_mut ( )
236
- . finish_module_map
226
+ . running_module_map
237
227
. get_mut ( & mid)
238
228
. expect ( "should have counter" ) ;
239
229
value. set_unfinished_child_module_count ( size) ;
@@ -256,6 +246,8 @@ impl Task<MakeTaskContext> for FinishModuleTask {
256
246
}
257
247
258
248
while let Some ( module_identifier) = queue. pop_front ( ) {
249
+ ctrl_task. running_module_map . remove ( & module_identifier) ;
250
+
259
251
let mgm = module_graph
260
252
. module_graph_module_by_identifier ( & module_identifier)
261
253
. expect ( "should have mgm" ) ;
@@ -270,7 +262,6 @@ impl Task<MakeTaskContext> for FinishModuleTask {
270
262
} else {
271
263
// entry
272
264
let execute_task = ctrl_task
273
- . as_mut ( )
274
265
. execute_task_map
275
266
. remove ( & connection. dependency_id )
276
267
. expect ( "should have execute task" ) ;
@@ -280,8 +271,7 @@ impl Task<MakeTaskContext> for FinishModuleTask {
280
271
281
272
for id in original_module_identifiers {
282
273
let value = ctrl_task
283
- . as_mut ( )
284
- . finish_module_map
274
+ . running_module_map
285
275
. get_mut ( & id)
286
276
. expect ( "should have counter" ) ;
287
277
value. minus_one ( ) ;
0 commit comments