Skip to content

Commit 9859aa5

Browse files
committed
Avoid copying and iterate correctly on SentryTracer.children
1 parent 7074d0b commit 9859aa5

File tree

1 file changed

+19
-16
lines changed

1 file changed

+19
-16
lines changed

sentry/src/main/java/io/sentry/SentryTracer.java

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import io.sentry.util.AutoClosableReentrantLock;
88
import io.sentry.util.Objects;
99
import io.sentry.util.SpanUtils;
10-
import java.util.ArrayList;
1110
import java.util.List;
1211
import java.util.ListIterator;
1312
import java.util.Map;
@@ -155,7 +154,10 @@ private void onDeadlineTimeoutReached() {
155154
// abort all child-spans first, this ensures the transaction can be finished,
156155
// even if waitForChildren is true
157156
// iterate in reverse order to ensure leaf spans are processed before their parents
158-
@NotNull final ListIterator<Span> iterator = children.listIterator(children.size());
157+
@NotNull final ListIterator<Span> iterator = this.children.listIterator();
158+
while (iterator.hasNext()) {
159+
iterator.next();
160+
}
159161
while (iterator.hasPrevious()) {
160162
@NotNull final Span span = iterator.previous();
161163
span.setSpanFinishedCallback(null);
@@ -677,14 +679,13 @@ private void updateBaggageValues(final @NotNull Baggage baggage) {
677679
}
678680

679681
private boolean hasAllChildrenFinished() {
680-
final List<Span> spans = new ArrayList<>(this.children);
681-
if (!spans.isEmpty()) {
682-
for (final Span span : spans) {
683-
// This is used in the spanFinishCallback, when the span isn't finished, but has a finish
684-
// date
685-
if (!span.isFinished() && span.getFinishDate() == null) {
686-
return false;
687-
}
682+
@NotNull final ListIterator<Span> iterator = this.children.listIterator();
683+
while (iterator.hasNext()) {
684+
@NotNull final Span span = iterator.previous();
685+
// This is used in the spanFinishCallback, when the span isn't finished, but has a finish
686+
// date
687+
if (!span.isFinished() && span.getFinishDate() == null) {
688+
return false;
688689
}
689690
}
690691
return true;
@@ -909,12 +910,14 @@ public void setName(@NotNull String name, @NotNull TransactionNameSource transac
909910

910911
@Override
911912
public @Nullable ISpan getLatestActiveSpan() {
912-
final List<Span> spans = new ArrayList<>(this.children);
913-
if (!spans.isEmpty()) {
914-
for (int i = spans.size() - 1; i >= 0; i--) {
915-
if (!spans.get(i).isFinished()) {
916-
return spans.get(i);
917-
}
913+
@NotNull final ListIterator<Span> iterator = this.children.listIterator();
914+
while (iterator.hasNext()) {
915+
iterator.next();
916+
}
917+
while (iterator.hasPrevious()) {
918+
@NotNull final Span span = iterator.previous();
919+
if (!span.isFinished()) {
920+
return span;
918921
}
919922
}
920923
return null;

0 commit comments

Comments
 (0)