@@ -214,6 +214,7 @@ cfg_taskdump! {
214
214
pub ( super ) trace_requested: AtomicBool ,
215
215
trace_start: Barrier ,
216
216
trace_end: Barrier ,
217
+ pub ( super ) result_ready: crate :: sync:: Notify ,
217
218
pub ( super ) trace_result: Mutex <Option <Dump >>,
218
219
}
219
220
@@ -223,6 +224,7 @@ cfg_taskdump! {
223
224
trace_requested: AtomicBool :: new( false ) ,
224
225
trace_start: Barrier :: new( remotes_len) ,
225
226
trace_end: Barrier :: new( remotes_len) ,
227
+ result_ready: crate :: sync:: Notify :: new( ) ,
226
228
trace_result: Mutex :: new( None ) ,
227
229
}
228
230
}
@@ -231,29 +233,34 @@ cfg_taskdump! {
231
233
self . trace_requested. load( Ordering :: Relaxed )
232
234
}
233
235
234
- pub ( super ) fn start_trace_request( & self , handle: & Handle ) {
236
+ pub ( super ) async fn start_trace_request( & self , handle: & Handle ) {
235
237
while self . trace_requested. compare_exchange( false ,
236
238
true ,
237
239
Ordering :: Acquire ,
238
240
Ordering :: Relaxed ) . is_err( )
239
241
{
240
242
handle. notify_all( ) ;
241
- crate :: loom :: thread :: yield_now( ) ;
243
+ crate :: task :: yield_now( ) . await ;
242
244
}
243
245
}
244
246
247
+ fn stash_result( & self , dump: Dump ) {
248
+ let _ = self . trace_result. lock( ) . insert( dump) ;
249
+ self . result_ready. notify_one( ) ;
250
+ }
251
+
245
252
pub ( super ) fn take_result( & self ) -> Option <Dump > {
246
253
self . trace_result. lock( ) . take( )
247
254
}
248
255
249
- pub ( super ) fn end_trace_request( & self , handle: & Handle ) {
256
+ pub ( super ) async fn end_trace_request( & self , handle: & Handle ) {
250
257
while self . trace_requested. compare_exchange( true ,
251
258
false ,
252
259
Ordering :: Acquire ,
253
260
Ordering :: Relaxed ) . is_err( )
254
261
{
255
262
handle. notify_all( ) ;
256
- crate :: loom :: thread :: yield_now( ) ;
263
+ crate :: task :: yield_now( ) . await ;
257
264
}
258
265
}
259
266
}
@@ -1121,7 +1128,7 @@ impl Handle {
1121
1128
let result = dump:: Dump :: new( traces) ;
1122
1129
1123
1130
// stash the result
1124
- let _ = self . shared. trace_status. trace_result . lock ( ) . insert ( result) ;
1131
+ self . shared. trace_status. stash_result ( result) ;
1125
1132
1126
1133
// allow other workers to proceed
1127
1134
self . shared. trace_status. trace_end. wait( ) ;
0 commit comments