@@ -221,15 +221,48 @@ where
221
221
sentry_span. set_data ( key, value) ;
222
222
}
223
223
224
- sentry_core:: configure_scope ( |scope| scope. set_span ( Some ( sentry_span. clone ( ) ) ) ) ;
225
-
226
224
let mut extensions = span. extensions_mut ( ) ;
227
225
extensions. insert ( SentrySpanData {
228
226
sentry_span,
229
227
parent_sentry_span,
230
228
} ) ;
231
229
}
232
230
231
+ /// Sets entered span as *current* sentry span. A tracing span can be
232
+ /// entered and existed multiple times, for example, when using a `tracing::Instrumented` future.
233
+ fn on_enter ( & self , id : & span:: Id , ctx : Context < ' _ , S > ) {
234
+ let span = match ctx. span ( & id) {
235
+ Some ( span) => span,
236
+ None => return ,
237
+ } ;
238
+
239
+ let extensions = span. extensions ( ) ;
240
+ let SentrySpanData { sentry_span, .. } = match extensions. get :: < SentrySpanData > ( ) {
241
+ Some ( data) => data,
242
+ None => return ,
243
+ } ;
244
+
245
+ sentry_core:: configure_scope ( |scope| scope. set_span ( Some ( sentry_span. clone ( ) ) ) ) ;
246
+ }
247
+
248
+ /// Set exited span's parent as *current* sentry span.
249
+ fn on_exit ( & self , id : & span:: Id , ctx : Context < ' _ , S > ) {
250
+ let span = match ctx. span ( & id) {
251
+ Some ( span) => span,
252
+ None => return ,
253
+ } ;
254
+
255
+ let extensions = span. extensions ( ) ;
256
+ let SentrySpanData {
257
+ parent_sentry_span, ..
258
+ } = match extensions. get :: < SentrySpanData > ( ) {
259
+ Some ( data) => data,
260
+ None => return ,
261
+ } ;
262
+
263
+ sentry_core:: configure_scope ( |scope| scope. set_span ( parent_sentry_span. clone ( ) ) ) ;
264
+ }
265
+
233
266
/// When a span gets closed, finish the underlying sentry span, and set back
234
267
/// its parent as the *current* sentry span.
235
268
fn on_close ( & self , id : span:: Id , ctx : Context < ' _ , S > ) {
@@ -239,16 +272,12 @@ where
239
272
} ;
240
273
241
274
let mut extensions = span. extensions_mut ( ) ;
242
- let SentrySpanData {
243
- sentry_span,
244
- parent_sentry_span,
245
- } = match extensions. remove :: < SentrySpanData > ( ) {
275
+ let SentrySpanData { sentry_span, .. } = match extensions. remove :: < SentrySpanData > ( ) {
246
276
Some ( data) => data,
247
277
None => return ,
248
278
} ;
249
279
250
280
sentry_span. finish ( ) ;
251
- sentry_core:: configure_scope ( |scope| scope. set_span ( parent_sentry_span) ) ;
252
281
}
253
282
254
283
/// Implement the writing of extra data to span
0 commit comments