Package org.h2.util

Class CloseWatcher


  • public class CloseWatcher
    extends java.lang.ref.PhantomReference<java.lang.Object>
    A phantom reference to watch for unclosed objects.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.lang.AutoCloseable closeable
      The closeable object.
      private java.lang.String openStackTrace
      The stack trace of when the object was created.
      private static java.lang.ref.ReferenceQueue<java.lang.Object> queue
      The queue (might be set to null at any time).
      private static java.util.Set<CloseWatcher> refs
      The reference set.
    • Constructor Summary

      Constructors 
      Constructor Description
      CloseWatcher​(java.lang.Object referent, java.lang.ref.ReferenceQueue<java.lang.Object> q, java.lang.AutoCloseable closeable)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      java.lang.AutoCloseable getCloseable()  
      java.lang.String getOpenStackTrace()
      Get the open stack trace or null if none.
      static CloseWatcher pollUnclosed()
      Check for an collected object.
      static CloseWatcher register​(java.lang.Object o, java.lang.AutoCloseable closeable, boolean stackTrace)
      Register an object.
      static void unregister​(CloseWatcher w)
      Unregister an object, so it is no longer tracked.
      • Methods inherited from class java.lang.ref.PhantomReference

        get
      • Methods inherited from class java.lang.ref.Reference

        clear, clone, enqueue, isEnqueued, reachabilityFence
      • Methods inherited from class java.lang.Object

        equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • queue

        private static final java.lang.ref.ReferenceQueue<java.lang.Object> queue
        The queue (might be set to null at any time).
      • refs

        private static final java.util.Set<CloseWatcher> refs
        The reference set. Must keep it, otherwise the references are garbage collected first and thus never enqueued.
      • openStackTrace

        private java.lang.String openStackTrace
        The stack trace of when the object was created. It is converted to a string early on to avoid classloader problems (a classloader can't be garbage collected if there is a static reference to one of its classes).
      • closeable

        private java.lang.AutoCloseable closeable
        The closeable object.
    • Constructor Detail

      • CloseWatcher

        public CloseWatcher​(java.lang.Object referent,
                            java.lang.ref.ReferenceQueue<java.lang.Object> q,
                            java.lang.AutoCloseable closeable)
    • Method Detail

      • pollUnclosed

        public static CloseWatcher pollUnclosed()
        Check for an collected object.
        Returns:
        the first watcher
      • register

        public static CloseWatcher register​(java.lang.Object o,
                                            java.lang.AutoCloseable closeable,
                                            boolean stackTrace)
        Register an object. Before calling this method, pollUnclosed() should be called in a loop to remove old references.
        Parameters:
        o - the object
        closeable - the object to close
        stackTrace - whether the stack trace should be registered (this is relatively slow)
        Returns:
        the close watcher
      • unregister

        public static void unregister​(CloseWatcher w)
        Unregister an object, so it is no longer tracked.
        Parameters:
        w - the reference
      • getOpenStackTrace

        public java.lang.String getOpenStackTrace()
        Get the open stack trace or null if none.
        Returns:
        the open stack trace
      • getCloseable

        public java.lang.AutoCloseable getCloseable()