Skip to content

Commit

Permalink
Merge pull request #870 from HubSpot/handle-thread-interrupt
Browse files Browse the repository at this point in the history
Handle thread interrupts by throwing an InterpretException
  • Loading branch information
jasmith-hs authored Jun 2, 2022
2 parents 673ad89 + f03bab9 commit 16684a6
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 4 deletions.
2 changes: 1 addition & 1 deletion src/main/java/com/hubspot/jinjava/tree/ExpressionNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public ExpressionNode(ExpressionStrategy expressionStrategy, ExpressionToken tok

@Override
public OutputNode render(JinjavaInterpreter interpreter) {
interpreter.getContext().setCurrentNode(this);
preProcess(interpreter);
try {
return expressionStrategy.interpretOutput(master, interpreter);
} catch (DeferredValueException e) {
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/com/hubspot/jinjava/tree/Node.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
**********************************************************************/
package com.hubspot.jinjava.tree;

import com.hubspot.jinjava.interpret.InterpretException;
import com.hubspot.jinjava.interpret.JinjavaInterpreter;
import com.hubspot.jinjava.tree.output.OutputNode;
import com.hubspot.jinjava.tree.parse.Token;
Expand Down Expand Up @@ -97,4 +98,19 @@ public String toTreeString(int level) {

return t.toString();
}

public void preProcess(JinjavaInterpreter interpreter) {
interpreter.getContext().setCurrentNode(this);
checkForInterrupt();
}

public final void checkForInterrupt() {
if (Thread.interrupted()) {
throw new InterpretException(
"Interrupt rendering " + getClass(),
master.getLineNumber(),
master.getStartPosition()
);
}
}
}
3 changes: 1 addition & 2 deletions src/main/java/com/hubspot/jinjava/tree/TagNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,12 @@ public TagNode(Tag tag, TagToken token, TokenScannerSymbols symbols) {

@Override
public OutputNode render(JinjavaInterpreter interpreter) {
interpreter.getContext().setCurrentNode(this);
preProcess(interpreter);
if (
interpreter.getContext().isValidationMode() && !tag.isRenderedInValidationMode()
) {
return new RenderedOutputNode("");
}

try {
if (interpreter.getConfig().getExecutionMode().useEagerParser()) {
interpreter.getContext().checkNumberOfDeferredTokens();
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/hubspot/jinjava/tree/TextNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public TextNode(TextToken token) {

@Override
public OutputNode render(JinjavaInterpreter interpreter) {
interpreter.getContext().setCurrentNode(this);
preProcess(interpreter);
return new RenderedOutputNode(
interpreter.getContext().isValidationMode() ? "" : master.output()
);
Expand Down

0 comments on commit 16684a6

Please sign in to comment.