-
Type:
Bug
-
Status: Closed
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: 1.11.0
-
Component/s: Runtime / Task
-
Labels:
In StreamTask.invoke, we should catch Throwable. Otherwise, cleanUpInvoke() will not be called if Error is thrown:
@Override public final void invoke() throws Exception { try { beforeInvoke(); // final check to exit early before starting to run if (canceled) { throw new CancelTaskException(); } // let the task do its work runMailboxLoop(); // if this left the run() method cleanly despite the fact that this was canceled, // make sure the "clean shutdown" is not attempted if (canceled) { throw new CancelTaskException(); } afterInvoke(); } catch (Exception invokeException) { failing = !canceled; try { cleanUpInvoke(); } // TODO: investigate why Throwable instead of Exception is used here. catch (Throwable cleanUpException) { Throwable throwable = ExceptionUtils.firstOrSuppressed(cleanUpException, invokeException); throw (throwable instanceof Exception ? (Exception) throwable : new Exception(throwable)); } throw invokeException; } cleanUpInvoke(); }
- links to