diff --git a/src/sbbs3/js_rtpool.c b/src/sbbs3/js_rtpool.c
index 29da99172cb362b9f607784cf2080f7e385e2561..8e375500f32643d1bfd62d1c10c85696e5a4406c 100644
--- a/src/sbbs3/js_rtpool.c
+++ b/src/sbbs3/js_rtpool.c
@@ -126,3 +126,22 @@ void DLLCALL jsrt_Release(JSRuntime *rt)
 	}
 #endif
 }
+
+void DLLCALL jsrt_TriggerAll(void)
+{
+#ifdef USE_JS_OPERATION_CALLBACK
+	int	i;
+	int j;
+	JSContext	*iterp,*cx;
+
+	for(i=0; i<JSRT_QUEUE_SIZE; i++) {
+		pthread_mutex_lock(&jsrt_mutex);
+		if(jsrt_queue[i].used) {
+			iterp=NULL;
+			while((cx = JS_ContextIterator(jsrt_queue[i].rt, &iterp)) != NULL)
+				JS_TriggerOperationCallback(cx);
+		}
+		pthread_mutex_unlock(&jsrt_mutex);
+	}
+#endif
+}
diff --git a/src/sbbs3/js_rtpool.h b/src/sbbs3/js_rtpool.h
index 22a48a6b6f61184431e03fe76a9c75eab63b2e3c..e320071ca25970aa37fa104d358040613bd3d32c 100644
--- a/src/sbbs3/js_rtpool.h
+++ b/src/sbbs3/js_rtpool.h
@@ -38,6 +38,7 @@ extern "C" {
 #endif
 DLLEXPORT JSRuntime * DLLCALL jsrt_GetNew(int maxbytes, unsigned long timeout, const char *filename, long line);
 DLLEXPORT void DLLCALL jsrt_Release(JSRuntime *);
+DLLEXPORT void DLLCALL jsrt_TriggerAll(void);
 #if defined(__cplusplus)
 }
 #endif