File tree Expand file tree Collapse file tree 3 files changed +14
-4
lines changed Expand file tree Collapse file tree 3 files changed +14
-4
lines changed Original file line number Diff line number Diff line change @@ -98,11 +98,11 @@ extension Tracer {
9898 _ function: ( Span ) throws -> T
9999 ) rethrows -> T {
100100 let span = self . startSpan ( operationName, context: context, ofKind: kind)
101+ defer { span. end ( ) }
101102 do {
102103 return try function ( span)
103104 } catch {
104105 span. recordError ( error)
105- span. end ( )
106106 throw error // rethrow
107107 }
108108 }
@@ -125,11 +125,11 @@ extension Tracer {
125125 _ function: ( Span ) throws -> T
126126 ) rethrows -> T {
127127 let span = self . startSpan ( operationName, baggage: baggage, ofKind: kind)
128+ defer { span. end ( ) }
128129 do {
129130 return try function ( span)
130131 } catch {
131132 span. recordError ( error)
132- span. end ( )
133133 throw error // rethrow
134134 }
135135 }
Original file line number Diff line number Diff line change @@ -19,6 +19,7 @@ import Tracing
1919
2020final class TestTracer : Tracer {
2121 private( set) var spans = [ TestSpan] ( )
22+ var onEndSpan : ( Span ) -> Void = { _ in }
2223
2324 func startSpan(
2425 _ operationName: String ,
@@ -30,8 +31,9 @@ final class TestTracer: Tracer {
3031 operationName: operationName,
3132 startTime: time,
3233 baggage: baggage,
33- kind: kind
34- ) { _ in }
34+ kind: kind,
35+ onEnd: onEndSpan
36+ )
3537 self . spans. append ( span)
3638 return span
3739 }
Original file line number Diff line number Diff line change @@ -63,11 +63,15 @@ final class TracerTests: XCTestCase {
6363 InstrumentationSystem . bootstrapInternal ( NoOpTracer ( ) )
6464 }
6565
66+ var spanEnded = false
67+ tracer. onEndSpan = { _ in spanEnded = true }
68+
6669 let value = tracer. withSpan ( " hello " , baggage: . topLevel) { _ in
6770 " yes "
6871 }
6972
7073 XCTAssertEqual ( value, " yes " )
74+ XCTAssertTrue ( spanEnded)
7175 }
7276
7377 func testWithSpan_throws( ) {
@@ -77,11 +81,15 @@ final class TracerTests: XCTestCase {
7781 InstrumentationSystem . bootstrapInternal ( NoOpTracer ( ) )
7882 }
7983
84+ var spanEnded = false
85+ tracer. onEndSpan = { _ in spanEnded = true }
86+
8087 do {
8188 _ = try tracer. withSpan ( " hello " , baggage: . topLevel) { _ in
8289 throw ExampleSpanError ( )
8390 }
8491 } catch {
92+ XCTAssertTrue ( spanEnded)
8593 XCTAssertEqual ( error as? ExampleSpanError , ExampleSpanError ( ) )
8694 return
8795 }
You can’t perform that action at this time.
0 commit comments