@Override public void close() { try { if (debug) { log.debug("Closing tlog" + this); } synchronized (this) { if (fos != null) { fos.flush(); fos.close(); // dereference these variables for GC fos = null; os = null; channel = null; raf = null; } } if (deleteOnClose) { try { Files.deleteIfExists(tlogFile.toPath()); } catch (IOException e) { // TODO: should this class care if a file couldnt be deleted? // this just emulates previous behavior, where only SecurityException would be handled. } } } catch (IOException e) { throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e); } finally { assert ObjectReleaseTracker.release(this); } }
protected void close() { try { if (debug) { log.debug("Closing tlog" + this); } synchronized (this) { fos.flush(); fos.close(); } if (deleteOnClose) { try { Files.deleteIfExists(tlogFile.toPath()); } catch (IOException e) { // TODO: should this class care if a file couldnt be deleted? // this just emulates previous behavior, where only SecurityException would be handled. } } } catch (IOException e) { throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e); } finally { assert ObjectReleaseTracker.release(this); } }
@Test public void testObjectReleaseTracker() { ObjectReleaseTracker.track(new Object()); ObjectReleaseTracker.release(new Object()); assertNotNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty()); assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty()); Object obj = new Object(); ObjectReleaseTracker.track(obj); ObjectReleaseTracker.release(obj); assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty()); Object obj1 = new Object(); ObjectReleaseTracker.track(obj1); Object obj2 = new Object(); ObjectReleaseTracker.track(obj2); Object obj3 = new Object(); ObjectReleaseTracker.track(obj3); ObjectReleaseTracker.release(obj1); ObjectReleaseTracker.release(obj2); ObjectReleaseTracker.release(obj3); assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty()); ObjectReleaseTracker.track(obj1); ObjectReleaseTracker.track(obj2); ObjectReleaseTracker.track(obj3); ObjectReleaseTracker.release(obj1); ObjectReleaseTracker.release(obj2); // ObjectReleaseTracker.release(obj3); assertNotNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty()); assertNull(ObjectReleaseTracker.clearObjectTrackerAndCheckEmpty()); }