/** Close the native library we're mapped to. */ public void dispose() { synchronized (libraries) { for (Iterator i = libraries.values().iterator(); i.hasNext(); ) { Reference ref = (WeakReference) i.next(); if (ref.get() == this) { i.remove(); } } } synchronized (this) { if (handle != 0) { Native.close(handle); handle = 0; } } }
void terminate() throws IOException { int state = this.state; if (anyAreClear(state, WRITE_SHUTDOWN | READ_SHUTDOWN)) { this.state = state | WRITE_SHUTDOWN | READ_SHUTDOWN; } if (Native.SAFE_GC) try { Native.testAndThrow(Native.dup2(Native.DEAD_FD, fd)); } finally { new FdRef<>(this, fd); } else { // hope for the best Native.testAndThrow(Native.close(fd)); } if (Native.EXTRA_TRACE) log.tracef("Close(%d)", fd); }