public void close() throws Exception { checkOpened(); writeLock.lock(); try { while (!pendingWrites.await(60000)) { HornetQJournalLogger.LOGGER.couldNotGetLock(fileName); } while (!maxIOSemaphore.tryAcquire(maxIO, 60, TimeUnit.SECONDS)) { HornetQJournalLogger.LOGGER.couldNotGetLock(fileName); } maxIOSemaphore = null; if (poller != null) { stopPoller(); } if (handler != null) { AsynchronousFileImpl.closeInternal(handler); AsynchronousFileImpl.addMax(-maxIO); } opened = false; handler = null; } finally { writeLock.unlock(); } }
private static boolean loadLibrary(final String name) { try { HornetQJournalLogger.LOGGER.trace(name + " being loaded"); System.loadLibrary(name); if (AsynchronousFileImpl.getNativeVersion() != AsynchronousFileImpl.EXPECTED_NATIVE_VERSION) { HornetQJournalLogger.LOGGER.incompatibleNativeLibrary(); return false; } else { // Initializing nanosleep AsynchronousFileImpl.setNanoSleepInterval(1); return true; } } catch (Throwable e) { HornetQJournalLogger.LOGGER.debug(name + " -> error loading the native library", e); return false; } }
static { String libraries[] = new String[] {"HornetQAIO", "HornetQAIO64", "HornetQAIO32", "HornetQAIO_ia64"}; for (String library : libraries) { if (AsynchronousFileImpl.loadLibrary(library)) { AsynchronousFileImpl.loaded = true; break; } else { HornetQJournalLogger.LOGGER.debug("Library " + library + " not found!"); } } if (!AsynchronousFileImpl.loaded) { HornetQJournalLogger.LOGGER.debug("Couldn't locate LibAIO Wrapper"); } }
private void startPoller() { writeLock.lock(); try { if (poller == null) { pollerLatch.countUp(); poller = new PollerRunnable(); try { pollerExecutor.execute(poller); } catch (Exception ex) { HornetQJournalLogger.LOGGER.errorStartingPoller(ex); } } } finally { writeLock.unlock(); } }
// Called by the JNI layer.. just ignore the // warning private void callbackError( final AIOCallback callback, final long sequence, final ByteBuffer buffer, final int errorCode, final String errorMessage) { HornetQJournalLogger.LOGGER.callbackError(errorMessage); fireExceptionListener(errorCode, errorMessage); maxIOSemaphore.release(); pendingWrites.countDown(); callbackLock.lock(); try { if (sequence == -1) { callback.onError(errorCode, errorMessage); } else { if (sequence == nextReadSequence) { nextReadSequence++; callback.onError(errorCode, errorMessage); flushCallbacks(); } else { pendingCallbacks.add(new ErrorCallback(sequence, callback, errorCode, errorMessage)); } } } finally { callbackLock.unlock(); } // The buffer is not sent on callback for read operations if (bufferCallback != null && buffer != null) { bufferCallback.bufferDone(buffer); } }
@Override protected void finalize() { if (opened) { HornetQJournalLogger.LOGGER.fileFinalizedWhileOpen(fileName); } }