File tree 1 file changed +6
-7
lines changed
1 file changed +6
-7
lines changed Original file line number Diff line number Diff line change 1
1
use crate :: cell:: Cell ;
2
+ use crate :: iter;
2
3
use crate :: sync:: Arc ;
3
4
use crate :: thread:: Thread ;
4
5
91
92
{
92
93
SPAWN_HOOKS . with ( |h| {
93
94
let mut hooks = h. take ( ) ;
95
+ let next = hooks. first . take ( ) ;
94
96
hooks. first = Some ( Arc :: new ( SpawnHook {
95
97
hook : Box :: new ( move |thread| Box :: new ( hook ( thread) ) ) ,
96
- next : hooks . first . take ( ) ,
98
+ next,
97
99
} ) ) ;
98
100
h. set ( hooks) ;
99
101
} ) ;
@@ -113,12 +115,9 @@ pub(super) fn run_spawn_hooks(thread: &Thread) -> ChildSpawnHooks {
113
115
snapshot
114
116
} ) ;
115
117
// Iterate over the hooks, run them, and collect the results in a vector.
116
- let mut next: & Option < Arc < SpawnHook > > = & hooks. first ;
117
- let mut to_run = Vec :: new ( ) ;
118
- while let Some ( hook) = next {
119
- to_run. push ( ( hook. hook ) ( thread) ) ;
120
- next = & hook. next ;
121
- }
118
+ let to_run: Vec < _ > = iter:: successors ( hooks. first . as_deref ( ) , |hook| hook. next . as_deref ( ) )
119
+ . map ( |hook| ( hook. hook ) ( thread) )
120
+ . collect ( ) ;
122
121
// Pass on the snapshot of the hooks and the results to the new thread,
123
122
// which will then run SpawnHookResults::run().
124
123
ChildSpawnHooks { hooks, to_run }
You can’t perform that action at this time.
0 commit comments