Uploaded image for project: 'XNIO'
  1. XNIO
  2. XNIO-253

Inapropriate finalizer in ByteBufferSlicePool$ThreadLocalCache$1

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • 3.3.3.Final, 3.4.0.Beta2
    • 3.3.0.Final
    • nio-impl
    • None

    Description

      ThreadLocalCache.finalizer is trying to remove a thread local:
      https://github.com/xnio/xnio/blob/4ce5eacbab141694377f844f37ba221e49a34a45/api/src/main/java/org/xnio/ByteBufferSlicePool.java#L264

      However, finalize method is invoked in another thread, so there is no much sense in calling {[threadLocal.remove}} from finalize.

      Was it really intended that .remove would result in initialValue?

      Here's a thread stack of the offending finalizer:

      Finalizer" #3 daemon prio=8 os_prio=0 tid=0x00007f4b101d2800 nid=0x9c03 runnable [0x00007f4afbffe000]
         java.lang.Thread.State: RUNNABLE
              at java.lang.Object.<init>(Object.java:37)
              at java.util.AbstractCollection.<init>(AbstractCollection.java:66)
              at java.util.ArrayDeque.<init>(ArrayDeque.java:197)
              at org.xnio.ByteBufferSlicePool$ThreadLocalCache$1.<init>(ByteBufferSlicePool.java:250)
              at org.xnio.ByteBufferSlicePool$ThreadLocalCache.<init>(ByteBufferSlicePool.java:250)
              at org.xnio.ByteBufferSlicePool$ThreadLocalCache.<init>(ByteBufferSlicePool.java:246)
              at org.xnio.ByteBufferSlicePool$1.initialValue(ByteBufferSlicePool.java:64)
              at org.xnio.ByteBufferSlicePool$1.initialValue(ByteBufferSlicePool.java:61)
              at java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:180)
              at java.lang.ThreadLocal.get(ThreadLocal.java:170)
              at org.xnio.ByteBufferSlicePool$1.remove(ByteBufferSlicePool.java:68)
              at org.xnio.ByteBufferSlicePool$ThreadLocalCache$1.finalize(ByteBufferSlicePool.java:256)
              at java.lang.System$2.invokeFinalize(System.java:1270)
              at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:98)
              at java.lang.ref.Finalizer.access$100(Finalizer.java:34)
              at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

      Attachments

        Activity

          People

            dlloyd@redhat.com David Lloyd
            vlsi_jira Vladimir Sitnikov (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: