func runUnsafeJavascript(vm *otto.Otto, unsafe string) (otto.Value, error) { start := time.Now() defer func() { duration := time.Since(start) if err := recover(); err != nil { if err == halt { fmt.Println("Some code took too long! Stopping after: ", duration) } panic(err) } }() vm.Interrupt = make(chan func(), 1) go func() { time.Sleep(maxExecutionTime * time.Second) vm.Interrupt <- func() { panic(halt) } }() return vm.Run(unsafe) }