in src/main/java/com/amazonaws/services/simpleworkflow/flow/core/ExternalTaskContext.java [107:155]
public void cancel(final Throwable cause) {
if (completionHandle.failure != null || completionHandle.completed) {
return;
}
if (cancelRequested) {
return;
}
cancelRequested = true;
if (cancellationHandler != null) {
parent.getExecutor().execute(new Runnable() {
@Override
public void run() {
Error error = null;
try {
inCancellationHandler = true;
cancellationHandler.handleCancellation(cause);
}
catch (Throwable e) {
if (e instanceof Error) {
error = (Error) e;
}
else {
if (stackTrace != null && !parent.isRethrown(e)) {
AsyncStackTrace merged = new AsyncStackTrace(stackTrace, e.getStackTrace(), 0);
merged.setStartFrom(getParentTaskMethodName());
e.setStackTrace(merged.getStackTrace());
}
completionHandle.setDoExecuteFailed("ExternalTaskCancellationHandler.handleCancellation", e);
}
}
finally {
if (error != null) {
throw error;
}
inCancellationHandler = false;
if (completionHandle.getFailure() != null) {
failToParent(completionHandle.getFailure());
}
else if (completionHandle.isCompleted()) {
removeFromParent();
}
}
}
});
} else {
removeFromParent();
}
}