From 4ef020a8c7bf6d4895a4e3bb86bb95eb9712f9e8 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Thu, 2 Dec 2004 03:17:54 +0000
Subject: [PATCH] js_GenericBranchCallback() only terminates the script if
 branch.auto_terminated is TRUE.

---
 src/sbbs3/js_internal.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/sbbs3/js_internal.c b/src/sbbs3/js_internal.c
index 3483ec8e05..870343e865 100644
--- a/src/sbbs3/js_internal.c
+++ b/src/sbbs3/js_internal.c
@@ -200,22 +200,29 @@ js_GenericBranchCallback(JSContext *cx, js_branch_t* branch)
 {
 	branch->counter++;
 
+	/* Terminated? */
+	if(branch->auto_terminate &&
+		(branch->terminated!=NULL && *branch->terminated)) {
+		JS_ReportError(cx,"Terminated");
+		branch->counter=0;
+		return(JS_FALSE);
+	}
+
 	/* Infinite loop? */
 	if(branch->limit && branch->counter > branch->limit) {
 		JS_ReportError(cx,"Infinite loop (%lu branches) detected",branch->counter);
 		branch->counter=0;
 		return(JS_FALSE);
 	}
+
 	/* Give up timeslices every once in a while */
 	if(branch->yield_interval && (branch->counter%branch->yield_interval)==0)
 		YIELD();
 
+	/* Periodic Garbage Collection */
 	if(branch->gc_interval && (branch->counter%branch->gc_interval)==0)
 		JS_MaybeGC(cx), branch->gc_attempts++;
 
-	if(branch->terminated!=NULL && *branch->terminated)
-		return(JS_FALSE);
-
     return(JS_TRUE);
 }
 
-- 
GitLab