You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@drill.apache.org by vrozov <gi...@git.apache.org> on 2017/11/03 20:45:26 UTC
[GitHub] drill pull request #1023: DRILL-5922 Fixed Child Allocator Leak. DRILL-5926 ...
Github user vrozov commented on a diff in the pull request:
https://github.com/apache/drill/pull/1023#discussion_r148889092
--- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/work/WorkManager.java ---
@@ -158,38 +165,51 @@ public DrillbitContext getContext() {
return dContext;
}
- private ExtendedLatch exitLatch = null; // used to wait to exit when things are still running
-
/**
* Waits until it is safe to exit. Blocks until all currently running fragments have completed.
- *
- * <p>This is intended to be used by {@link org.apache.drill.exec.server.Drillbit#close()}.</p>
+ * This is intended to be used by {@link org.apache.drill.exec.server.Drillbit#close()}.
*/
public void waitToExit() {
- synchronized(this) {
- if (queries.isEmpty() && runningFragments.isEmpty()) {
- return;
+ final long startTime = System.currentTimeMillis();
+
+ try {
+ exitLock.lock();
+ long diff;
+ while ((diff = (System.currentTimeMillis() - startTime)) < EXIT_TIMEOUT) {
+ if (queries.isEmpty() && runningFragments.isEmpty()) {
+ break;
+ }
+
+ try {
+ final boolean success = exitCondition.await(EXIT_TIMEOUT - diff, TimeUnit.MILLISECONDS);
+
+ if (!success) {
+ logger.warn("Timed out after %d millis while waiting to exit.", EXIT_TIMEOUT);
+ exitLock.lock();
--- End diff --
Why is this lock necessary?
---