@Override public boolean enqueue() { try { connector.close(); } catch (Exception ignored) { log.warning("Could not close JMXConnector: " + connector); } finally { connector = null; jmxConnectorRefs.remove(this); } return super.enqueue(); } }
@Override public boolean enqueue() { try { connector.close(); } catch (Exception ignored) { log.warning("Could not close JMXConnector: " + connector); } finally { connector = null; jmxConnectorRefs.remove(this); } return super.enqueue(); } }
@Override public void recycle() { for (Iterator<Integer> pids = workersMap.keySet().iterator(); pids.hasNext();) { WeakReference<IWorker> weakRef = workersMap.get(pids.next()); IWorker ref = weakRef.get(); if (ref == null) { if (!weakRef.isEnqueued()) { weakRef.clear(); weakRef.enqueue(); } workersMap.remove(weakRef); } } }
@Override public void sendKillSignal(int pid) { if (workersMap.size() > 0) { WeakReference<IWorker> weakRef = workersMap.get(pid); if (weakRef != null) { IWorker ref = weakRef.get(); if (ref != null) ref.done(); if (!weakRef.isEnqueued()) { weakRef.clear(); weakRef.enqueue(); } } } }
void close(Throwable cause) { mState = STATE_CLOSED; mDatabaseRef.enqueue(); mDatabaseRef.clear(); List<ShutdownHook> toShutdown; synchronized (this) { if (mShutdownHook != null) { try { Runtime.getRuntime().removeShutdownHook(mShutdownHook); } catch (Throwable e) { } mShutdownHook = null; } // Only run shutdown hooks if cleanly closing, to avoid deadlocks. if (mToShutdown == null || cause != null) { toShutdown = null; } else { toShutdown = new ArrayList<>(mToShutdown); } mToShutdown = null; } if (toShutdown != null) { for (ShutdownHook obj : toShutdown) { obj.shutdown(); } } }
@Override public void killAll() { for (WeakReference<IWorker> weakRef : workersMap.values()) { IWorker ref = weakRef.get(); if (ref != null) ref.done(); if (!weakRef.isEnqueued()) { weakRef.clear(); weakRef.enqueue(); } } recycle(); }
mDatabaseRef.enqueue(); mDatabaseRef.clear();
mDatabaseRef.enqueue(); mDatabaseRef.clear();