public synchronized R get() { if (delegate == null) { delegate = open(); } ++refs; final R delegateLocal = delegate; return type.closeWrapper(delegate, new ResourceOnClose<E>() { private boolean closed = false; @Override public synchronized void close() throws E { if (closed) { // arggh return; } closed = true; deref(); } }); }
public static <R, E extends Exception> R wrap(final ResourceType<R, E> type, final R delegate) { if (!log.isErrorEnabled()) { // We leave this check in in case this goes haywire in the field. // This way setting the log level for CloseTracking to OFF can // still disable it entirely. return delegate; } final Tracking tracking = new Tracking(type.name()); R wrapped = type.closeWrapper(delegate, () -> { tracking.close(); type.close(delegate); }); destructorReferences.add(new MyReference(wrapped, tracking)); return wrapped; }
public synchronized R get() { if (delegate == null) { delegate = open(); } ++refs; final R delegateLocal = delegate; return type.closeWrapper(delegate, new ResourceOnClose<E>() { private boolean closed = false; @Override public synchronized void close() throws E { if (closed) { // arggh return; } closed = true; deref(); } }); }
public static <R, E extends Exception> R wrap(final ResourceType<R, E> type, final R delegate) { if (!log.isErrorEnabled()) { // We leave this check in in case this goes haywire in the field. // This way setting the log level for CloseTracking to OFF can // still disable it entirely. return delegate; } final Tracking tracking = new Tracking(type.name()); R wrapped = type.closeWrapper(delegate, () -> { tracking.close(); type.close(delegate); }); destructorReferences.add(new MyReference(wrapped, tracking)); return wrapped; }