@@ -187,7 +187,7 @@ impl TaskState {
187
187
let description2 = description. clone ( ) ;
188
188
Self {
189
189
aggregation_node : TaskAggregationNode :: new ( ) ,
190
- state_type : Scheduled {
190
+ state_type : Scheduled ( Box :: new ( ScheduledState {
191
191
start_event : Event :: new ( move || {
192
192
format ! ( "TaskState({})::start_event" , description( ) )
193
193
} ) ,
@@ -196,7 +196,7 @@ impl TaskState {
196
196
} ) ,
197
197
outdated_edges : Default :: default ( ) ,
198
198
clean : true ,
199
- } ,
199
+ } ) ) ,
200
200
collectibles : Default :: default ( ) ,
201
201
output : Default :: default ( ) ,
202
202
cells : Default :: default ( ) ,
@@ -326,8 +326,8 @@ struct InProgressState {
326
326
/// true, when the task was invalidated while executing. It will be
327
327
/// scheduled again.
328
328
stale : bool ,
329
- /// Dependencies and children that need to be disconnected once leaving
330
- /// this state .
329
+ /// Dependencies and children that need to be disconnected once entering
330
+ /// Done .
331
331
outdated_edges : TaskEdgesSet ,
332
332
/// Children that are connected during execution. These children are already
333
333
/// removed from `outdated_edges`.
@@ -336,6 +336,18 @@ struct InProgressState {
336
336
outdated_collectibles : MaybeCollectibles ,
337
337
}
338
338
339
+ struct ScheduledState {
340
+ /// Event is fired when the task is IsProgress.
341
+ start_event : Event ,
342
+ /// Event is fired when the task is Done.
343
+ done_event : Event ,
344
+ /// Dependencies and children that need to be disconnected once entering
345
+ /// Done.
346
+ outdated_edges : Box < TaskEdgesSet > ,
347
+ /// true, when the task wasn't changed since the last execution
348
+ clean : bool ,
349
+ }
350
+
339
351
enum TaskStateType {
340
352
/// Ready
341
353
///
@@ -362,15 +374,7 @@ enum TaskStateType {
362
374
/// Execution is invalid and scheduled
363
375
///
364
376
/// on start this will move to InProgress or Dirty depending on active flag
365
- Scheduled {
366
- /// Event is fired when the task is IsProgress.
367
- start_event : Event ,
368
- /// Event is fired when the task is Done.
369
- done_event : Event ,
370
- outdated_edges : Box < TaskEdgesSet > ,
371
- /// true, when the task wasn't changed since the last execution
372
- clean : bool ,
373
- } ,
377
+ Scheduled ( Box < ScheduledState > ) ,
374
378
375
379
/// Execution is happening
376
380
///
@@ -396,7 +400,7 @@ impl TaskStateType {
396
400
TaskStateType :: Dirty { outdated_edges, .. } => {
397
401
Either :: Right ( Either :: Right ( outdated_edges. children ( ) ) )
398
402
}
399
- TaskStateType :: Scheduled { outdated_edges, .. } => {
403
+ TaskStateType :: Scheduled ( box ScheduledState { outdated_edges, .. } ) => {
400
404
Either :: Right ( Either :: Right ( outdated_edges. children ( ) ) )
401
405
}
402
406
}
@@ -420,7 +424,7 @@ impl TaskStateType {
420
424
( edges, children)
421
425
}
422
426
TaskStateType :: Dirty { outdated_edges, .. }
423
- | TaskStateType :: Scheduled { outdated_edges, .. } => {
427
+ | TaskStateType :: Scheduled ( box ScheduledState { outdated_edges, .. } ) => {
424
428
let mut edges = * outdated_edges;
425
429
let children = edges. drain_children ( ) ;
426
430
( edges, children)
@@ -718,12 +722,12 @@ impl Task {
718
722
// should not start in this state
719
723
return None ;
720
724
}
721
- Scheduled {
725
+ Scheduled ( box ScheduledState {
722
726
ref mut done_event,
723
727
ref mut start_event,
724
728
ref mut outdated_edges,
725
729
clean,
726
- } => {
730
+ } ) => {
727
731
start_event. notify ( usize:: MAX ) ;
728
732
let done_event = done_event. take ( ) ;
729
733
let outdated_edges = * take ( outdated_edges) ;
@@ -997,12 +1001,12 @@ impl Task {
997
1001
let description = self . get_event_description ( ) ;
998
1002
let start_event =
999
1003
Event :: new ( move || format ! ( "TaskState({})::start_event" , description( ) ) ) ;
1000
- state. state_type = Scheduled {
1004
+ state. state_type = Scheduled ( Box :: new ( ScheduledState {
1001
1005
start_event,
1002
1006
done_event,
1003
1007
outdated_edges : Box :: new ( outdated_edges) ,
1004
1008
clean : false ,
1005
- } ;
1009
+ } ) ) ;
1006
1010
drop ( state) ;
1007
1011
schedule_task = true ;
1008
1012
} else {
@@ -1088,7 +1092,7 @@ impl Task {
1088
1092
1089
1093
if let TaskMetaStateWriteGuard :: Full ( mut state) = self . state_mut ( ) {
1090
1094
match state. state_type {
1091
- Scheduled { ref mut clean, .. } => {
1095
+ Scheduled ( box ScheduledState { ref mut clean, .. } ) => {
1092
1096
* clean = false ;
1093
1097
1094
1098
// already scheduled
@@ -1113,7 +1117,7 @@ impl Task {
1113
1117
) ;
1114
1118
let description = self . get_event_description ( ) ;
1115
1119
let description2 = description. clone ( ) ;
1116
- state. state_type = Scheduled {
1120
+ state. state_type = Scheduled ( Box :: new ( ScheduledState {
1117
1121
done_event : Event :: new ( move || {
1118
1122
format ! ( "TaskState({})::done_event" , description( ) )
1119
1123
} ) ,
@@ -1122,7 +1126,7 @@ impl Task {
1122
1126
} ) ,
1123
1127
outdated_edges : Box :: new ( outdated_edges) ,
1124
1128
clean : false ,
1125
- } ;
1129
+ } ) ) ;
1126
1130
drop ( state) ;
1127
1131
change_job. apply ( & aggregation_context) ;
1128
1132
@@ -1210,7 +1214,7 @@ impl Task {
1210
1214
} => {
1211
1215
let description = self . get_event_description ( ) ;
1212
1216
let description2 = description. clone ( ) ;
1213
- state. state_type = Scheduled {
1217
+ state. state_type = Scheduled ( Box :: new ( ScheduledState {
1214
1218
start_event : Event :: new ( move || {
1215
1219
format ! ( "TaskState({})::start_event" , description( ) )
1216
1220
} ) ,
@@ -1219,7 +1223,7 @@ impl Task {
1219
1223
} ) ,
1220
1224
outdated_edges : take ( outdated_edges) ,
1221
1225
clean : false ,
1222
- } ;
1226
+ } ) ) ;
1223
1227
let change_job = state. aggregation_node . apply_change (
1224
1228
& aggregation_context,
1225
1229
TaskChange {
@@ -1245,7 +1249,7 @@ impl Task {
1245
1249
) ;
1246
1250
let description = self . get_event_description ( ) ;
1247
1251
let description2 = description. clone ( ) ;
1248
- state. state_type = Scheduled {
1252
+ state. state_type = Scheduled ( Box :: new ( ScheduledState {
1249
1253
start_event : Event :: new ( move || {
1250
1254
format ! ( "TaskState({})::start_event" , description( ) )
1251
1255
} ) ,
@@ -1254,7 +1258,7 @@ impl Task {
1254
1258
} ) ,
1255
1259
outdated_edges : Box :: new ( outdated_edges) ,
1256
1260
clean : true ,
1257
- } ;
1261
+ } ) ) ;
1258
1262
drop ( state) ;
1259
1263
change_job. apply ( & aggregation_context) ;
1260
1264
@@ -1277,7 +1281,7 @@ impl Task {
1277
1281
let mut aggregation_context = TaskAggregationContext :: new ( turbo_tasks, backend) ;
1278
1282
let description = self . get_event_description ( ) ;
1279
1283
let description2 = description. clone ( ) ;
1280
- state. state_type = Scheduled {
1284
+ state. state_type = Scheduled ( Box :: new ( ScheduledState {
1281
1285
start_event : Event :: new ( move || {
1282
1286
format ! ( "TaskState({})::start_event" , description( ) )
1283
1287
} ) ,
@@ -1286,7 +1290,7 @@ impl Task {
1286
1290
} ) ,
1287
1291
outdated_edges : take ( outdated_edges) ,
1288
1292
clean : false ,
1289
- } ;
1293
+ } ) ) ;
1290
1294
let job = state. aggregation_node . apply_change (
1291
1295
& aggregation_context,
1292
1296
TaskChange {
@@ -1390,14 +1394,14 @@ impl Task {
1390
1394
let start_event =
1391
1395
Event :: new ( move || format ! ( "TaskState({})::start_event" , description( ) ) ) ;
1392
1396
let listener = start_event. listen_with_note ( note) ;
1393
- state. state_type = Scheduled {
1397
+ state. state_type = Scheduled ( Box :: new ( ScheduledState {
1394
1398
start_event,
1395
1399
done_event : Event :: new ( move || {
1396
1400
format ! ( "TaskState({})::done_event" , description2( ) )
1397
1401
} ) ,
1398
1402
outdated_edges : take ( outdated_edges) ,
1399
1403
clean : false ,
1400
- } ;
1404
+ } ) ) ;
1401
1405
let change_job = state. aggregation_node . apply_change (
1402
1406
& aggregation_context,
1403
1407
TaskChange {
@@ -1411,9 +1415,9 @@ impl Task {
1411
1415
aggregation_context. apply_queued_updates ( ) ;
1412
1416
Err ( ReadCellError :: Recomputing ( listener) )
1413
1417
}
1414
- Scheduled {
1418
+ Scheduled ( box ScheduledState {
1415
1419
ref start_event, ..
1416
- } => Err ( ReadCellError :: Recomputing (
1420
+ } ) => Err ( ReadCellError :: Recomputing (
1417
1421
start_event. listen_with_note ( note) ,
1418
1422
) ) ,
1419
1423
}
@@ -1630,14 +1634,14 @@ impl Task {
1630
1634
let done_event =
1631
1635
Event :: new ( move || format ! ( "TaskState({})::done_event" , description( ) ) ) ;
1632
1636
let listener = done_event. listen_with_note ( note) ;
1633
- state. state_type = Scheduled {
1637
+ state. state_type = Scheduled ( Box :: new ( ScheduledState {
1634
1638
start_event : Event :: new ( move || {
1635
1639
format ! ( "TaskState({})::start_event" , description2( ) )
1636
1640
} ) ,
1637
1641
done_event,
1638
1642
outdated_edges : take ( outdated_edges) ,
1639
1643
clean : false ,
1640
- } ;
1644
+ } ) ) ;
1641
1645
let change_job = state. aggregation_node . apply_change (
1642
1646
& aggregation_context,
1643
1647
TaskChange {
@@ -1649,15 +1653,9 @@ impl Task {
1649
1653
change_job. apply ( & aggregation_context) ;
1650
1654
Ok ( Err ( listener) )
1651
1655
}
1652
- Scheduled {
1653
- done_event : ref event,
1654
- ..
1655
- }
1656
- | InProgress ( box InProgressState {
1657
- done_event : ref event,
1658
- ..
1659
- } ) => {
1660
- let listener = event. listen_with_note ( note) ;
1656
+ Scheduled ( box ScheduledState { ref done_event, .. } )
1657
+ | InProgress ( box InProgressState { ref done_event, .. } ) => {
1658
+ let listener = done_event. listen_with_note ( note) ;
1661
1659
drop ( state) ;
1662
1660
Ok ( Err ( listener) )
1663
1661
}
0 commit comments