Skip to content

Cycles not detected for field recursion on arrays/lists of elements  #18

@willtoth

Description

@willtoth

When implementing Loggable on a class, if that class also has a list of references to loggables in a cycle, such as static references to itself, the recursion does not terminate until a stack overflow causes a crash. Example output from crash:

Error at java.base/jdk.internal.misc.Unsafe.allocateUninitializedArray(Unsafe.java:1375): Unhandled exception: java.lang.StackOverflowError
        at java.base/jdk.internal.misc.Unsafe.allocateUninitializedArray(Unsafe.java:1375)
        at java.base/java.lang.StringConcatHelper.newArray(StringConcatHelper.java:494)
        at java.base/java.lang.StringConcatHelper.newArrayWithSuffix(StringConcatHelper.java:475)
        at edu.wpi.first.util.ErrorMessages.requireNonNullParam(ErrorMessages.java:27)
        at edu.wpi.first.wpilibj.shuffleboard.ShuffleboardLayout.<init>(ShuffleboardLayout.java:24)
        at edu.wpi.first.wpilibj.shuffleboard.ContainerHelper.getLayout(ContainerHelper.java:45)
        at edu.wpi.first.wpilibj.shuffleboard.ShuffleboardLayout.getLayout(ShuffleboardLayout.java:34)
        at edu.wpi.first.wpilibj.shuffleboard.ShuffleboardContainer.getLayout(ShuffleboardContainer.java:49)
        at io.github.oblarg.oblog.WrappedShuffleboardLayout.getLayout(WrappedShuffleboardLayout.java:21)
        at io.github.oblarg.oblog.Logger.logLoggable(Logger.java:1342)
        at io.github.oblarg.oblog.Logger.lambda$logLoggable$68(Logger.java:1396)
        at io.github.oblarg.oblog.Logger.logLoggable(Logger.java:1461)
        at io.github.oblarg.oblog.Logger.lambda$logLoggable$68(Logger.java:1396)
        at io.github.oblarg.oblog.Logger.logLoggable(Logger.java:1461)
        at io.github.oblarg.oblog.Logger.lambda$logLoggable$68(Logger.java:1396)
        at io.github.oblarg.oblog.Logger.logLoggable(Logger.java:1461)
        at io.github.oblarg.oblog.Logger.lambda$logLoggable$68(Logger.java:1396)
        at io.github.oblarg.oblog.Logger.logLoggable(Logger.java:1461)
        at io.github.oblarg.oblog.Logger.lambda$logLoggable$68(Logger.java:1396)
...truncated...

For example

public class MyClass implements Loggable {

  private List<MyClass> references;
  private static List <MyClass> staticReferences
}

This is the specific class that fails once brought to 2023 and add Loggable

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions