@@ -79,26 +79,18 @@ where
79
79
80
80
enum ParallelPrimeCacheWorkerProgress {
81
81
BeginCrate { crate_id : CrateId , crate_name : String } ,
82
- EndCrate { crate_id : CrateId , cancelled : bool } ,
82
+ EndCrate { crate_id : CrateId } ,
83
83
}
84
84
85
85
let prime_caches_worker = move |db : Snapshot < RootDatabase > | {
86
86
while let Ok ( ( crate_id, crate_name) ) = work_receiver. recv ( ) {
87
87
progress_sender
88
88
. send ( ParallelPrimeCacheWorkerProgress :: BeginCrate { crate_id, crate_name } ) ?;
89
89
90
- let cancelled = Cancelled :: catch ( || {
91
- // This also computes the DefMap
92
- db. import_map ( crate_id) ;
93
- } )
94
- . is_err ( ) ;
90
+ // This also computes the DefMap
91
+ db. import_map ( crate_id) ;
95
92
96
- progress_sender
97
- . send ( ParallelPrimeCacheWorkerProgress :: EndCrate { crate_id, cancelled } ) ?;
98
-
99
- if cancelled {
100
- break ;
101
- }
93
+ progress_sender. send ( ParallelPrimeCacheWorkerProgress :: EndCrate { crate_id } ) ?;
102
94
}
103
95
104
96
Ok :: < _ , crossbeam_channel:: SendError < _ > > ( ( ) )
@@ -113,11 +105,12 @@ where
113
105
let crates_total = crates_to_prime. len ( ) ;
114
106
let mut crates_done = 0 ;
115
107
116
- let mut is_cancelled = false ;
117
108
let mut crates_currently_indexing =
118
109
FxHashMap :: with_capacity_and_hasher ( num_worker_threads as _ , Default :: default ( ) ) ;
119
110
120
- while !crates_to_prime. is_empty ( ) && !is_cancelled {
111
+ while !crates_to_prime. is_empty ( ) {
112
+ db. unwind_if_cancelled ( ) ;
113
+
121
114
for crate_id in & mut crates_to_prime {
122
115
work_sender
123
116
. send ( (
@@ -129,17 +122,20 @@ where
129
122
130
123
let worker_progress = match progress_receiver. recv ( ) {
131
124
Ok ( p) => p,
132
- Err ( _) => break ,
125
+ Err ( _) => {
126
+ // our workers may have died from a cancelled task, so we'll check and re-raise here.
127
+ db. unwind_if_cancelled ( ) ;
128
+ break ;
129
+ }
133
130
} ;
134
131
match worker_progress {
135
132
ParallelPrimeCacheWorkerProgress :: BeginCrate { crate_id, crate_name } => {
136
133
crates_currently_indexing. insert ( crate_id, crate_name) ;
137
134
}
138
- ParallelPrimeCacheWorkerProgress :: EndCrate { crate_id, cancelled } => {
135
+ ParallelPrimeCacheWorkerProgress :: EndCrate { crate_id } => {
139
136
crates_currently_indexing. remove ( & crate_id) ;
140
137
crates_to_prime. mark_done ( crate_id) ;
141
138
crates_done += 1 ;
142
- is_cancelled = cancelled;
143
139
}
144
140
} ;
145
141
@@ -150,7 +146,6 @@ where
150
146
} ;
151
147
152
148
cb ( progress) ;
153
- db. unwind_if_cancelled ( ) ;
154
149
}
155
150
} )
156
151
. unwrap ( ) ;
0 commit comments