@@ -106,8 +106,10 @@ class SentryTracer extends ISentrySpan {
106106 }
107107 }
108108
109- await _rootSpan.finish (endTimestamp: _rootEndTimestamp);
109+ // the callback should run before because if the span is finished,
110+ // we cannot attach data, its immutable after being finished.
110111 await _onFinish? .call (this );
112+ await _rootSpan.finish (endTimestamp: _rootEndTimestamp);
111113
112114 // remove from scope
113115 await _hub.configureScope ((scope) {
@@ -216,21 +218,23 @@ class SentryTracer extends ISentrySpan {
216218 _hub,
217219 samplingDecision: _rootSpan.samplingDecision,
218220 startTimestamp: startTimestamp,
219- finishedCallback: ({
220- DateTime ? endTimestamp,
221- }) {
222- final finishStatus = _finishStatus;
223- if (finishStatus.finishing) {
224- finish (status: finishStatus.status, endTimestamp: endTimestamp);
225- }
226- },
221+ finishedCallback: _finishedCallback,
227222 );
228223
229224 _children.add (child);
230225
231226 return child;
232227 }
233228
229+ Future <void > _finishedCallback ({
230+ DateTime ? endTimestamp,
231+ }) async {
232+ final finishStatus = _finishStatus;
233+ if (finishStatus.finishing) {
234+ await finish (status: finishStatus.status, endTimestamp: endTimestamp);
235+ }
236+ }
237+
234238 @override
235239 SpanStatus ? get status => _rootSpan.status;
236240
@@ -284,6 +288,9 @@ class SentryTracer extends ISentrySpan {
284288
285289 @override
286290 void setMeasurement (String name, num value, {SentryMeasurementUnit ? unit}) {
291+ if (finished) {
292+ return ;
293+ }
287294 final measurement = SentryMeasurement (name, value, unit: unit);
288295 _measurements[name] = measurement;
289296 }
0 commit comments