@@ -221,16 +221,50 @@ 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
233
- /// When a span gets closed, finish the underlying sentry span, and set back
231
+ ///Called when span is entered
232
+ ///
233
+ ///When tracing Span is entered, it becomes ongoing, therefore we shall update current scope with it
234
+ fn on_enter ( & self , id : & span:: Id , ctx : Context < ' _ , S > ) {
235
+ let span = match ctx. span ( & id) {
236
+ Some ( span) => span,
237
+ None => return ,
238
+ } ;
239
+
240
+ let extensions = span. extensions ( ) ;
241
+ let span = match extensions. get :: < SentrySpanData > ( ) {
242
+ Some ( data) => & data. sentry_span ,
243
+ _ => return ,
244
+ } ;
245
+
246
+ sentry_core:: configure_scope ( |scope| scope. set_span ( Some ( span. clone ( ) ) ) ) ;
247
+ }
248
+
249
+ ///Called when span is exited
250
+ ///
251
+ ///When tracing Span exits, it awaits, therefore we shall set parent span as ongoing, if any
252
+ fn on_exit ( & self , id : & span:: Id , ctx : Context < ' _ , S > ) {
253
+ let span = match ctx. span ( & id) {
254
+ Some ( span) => span,
255
+ None => return ,
256
+ } ;
257
+
258
+ let extensions = span. extensions ( ) ;
259
+ let span = match extensions. get :: < SentrySpanData > ( ) {
260
+ Some ( data) => & data. parent_sentry_span ,
261
+ _ => return ,
262
+ } ;
263
+
264
+ sentry_core:: configure_scope ( |scope| scope. set_span ( span. clone ( ) ) ) ;
265
+ }
266
+
267
+ /// When a span gets dropped/closed, finish the underlying sentry span, and set back
234
268
/// its parent as the *current* sentry span.
235
269
fn on_close ( & self , id : span:: Id , ctx : Context < ' _ , S > ) {
236
270
let span = match ctx. span ( & id) {
@@ -239,16 +273,12 @@ where
239
273
} ;
240
274
241
275
let mut extensions = span. extensions_mut ( ) ;
242
- let SentrySpanData {
243
- sentry_span,
244
- parent_sentry_span,
245
- } = match extensions. remove :: < SentrySpanData > ( ) {
276
+ let SentrySpanData { sentry_span, .. } = match extensions. remove :: < SentrySpanData > ( ) {
246
277
Some ( data) => data,
247
278
None => return ,
248
279
} ;
249
280
250
281
sentry_span. finish ( ) ;
251
- sentry_core:: configure_scope ( |scope| scope. set_span ( parent_sentry_span) ) ;
252
282
}
253
283
254
284
/// Implement the writing of extra data to span
0 commit comments